백준/문제

17285번: XORChic

스몰스테핑 2024. 9. 4. 14:37

문제 출처 : https://www.acmicpc.net/problem/17285

 

언어 : Kotlin

 

문제 설명 :

범기가 영수의 파일에 XOR 연산을 수행해버렸다!

영수의 파일은 문자열 S를 담고 있었고, 문자열 S는 알파벳 대문자로만 구성되어 있었다. 파일에 XOR 연산을 수행하면, 파일이 담고 있는 문자열의 모든 문자에 대해서 XOR 연산이 수행되어 파일 내용이 변경된다.

XOR 연산을 사용하려면, key가 필요하다. S = "ABCD", key = 10인 경우라면, XOR 연산을 수행한 문자열은 "KHIN"이 되어버린다. "A"의 아스키 코드는 65이고, 여기에 10과 XOR 연산을 수행하면 결과는 75가 된다. 아스키 코드로 75는 "K"이기 때문에, "A"는 "K"로 암호화 되고, 나머지 문자도 이와 같은 방식을 사용한다.

영수는 파일을 복호화하려고 하지만, 사용된 key의 값을 모르고 있다. 파일의 처음 8글자가 "CHICKENS"로 항상 시작한다는 정보를 알고 있을 때, 원래 파일로 복호화할 수 있을까?

 

입력 :

첫째 줄에 XOR 연산이 수행된 문자열 T가 주어진다. (10 ≤ T의 길이 ≤ 100)
문자열 T는 출력 가능한 문자(Printable character)로만 이루어져 있다.

 

출력 :

첫째 줄에 XOR 연산이 수행되기 이전의 문자열 S를 출력한다.

 

제한 사항 :

  • 시간 제한 : 1초
  • 메모리 제한 : 256MB

 

입출력 예 :

입력 출력
U^_U]SXEPYDS@SDOB^_XQ CHICKENSFOREVERYTHING

 

풀이 : 

간단하게 XOR 연산을 하여 키값을 찾고 되돌리는 문제

import java.io.BufferedWriter
import java.io.OutputStreamWriter

fun main() = with(System.`in`.bufferedReader()) {
    val bw = BufferedWriter(OutputStreamWriter(System.out))

    val t = readLine()
    val key = t[0].code xor 'C'.code
    val original = t.map { (it.code xor key).toChar() }.joinToString("")

    bw.write(original)
    bw.flush()
    bw.close()
}