백준 XORChic

KIMYEONGJUN·2026년 2월 13일
post-thumbnail

문제

내가 생각했을때 문제에서 원하는부분

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

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

내가 이 문제를 보고 생각해본 부분

먼저 BufferedReader를 사용해 XOR된 문자열 T를 입력받는다.
고정된 원래 시작 문자열 "CHICKENS"를 선언해준다.
T의 첫 문자와 "C"를 XOR해서 key를 구해준다.
그리고 첫 8글자에 대해 key가 제대로 맞는지 검증해준다.
만약 맞으면, 문자열 T의 모든 문자에 대해 XOR 연산을 다시 수행해 원래 문자열을 복원하고 출력한다.
문제 조건에 따르면 항상 key가 하나로 맞으므로 오류 처리는 생략할 수도 있다.
마지막에 BufferedReader를 닫아 자원을 정리한다.

코드로 구현

package baekjoon.baekjoon_32;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

// 백준 17285번 문제
public class Main1297 {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String T = br.readLine();

        String originalStart = "CHICKENS"; // 원래 시작 문자열
        int key = T.charAt(0) ^ originalStart.charAt(0); // 첫 문자로 key 추론

        // key 검증 (처음 8글자가 모두 key로 맞는지 확인)
        boolean validKey = true;
        for (int i = 1; i < 8; i++) {
            if ((T.charAt(i) ^ key) != originalStart.charAt(i)) {
                validKey = false;
                break;
            }
        }

        // 복호화
        StringBuilder sb = new StringBuilder();
        if (validKey) {
            for (int i = 0; i < T.length(); i++) {
                sb.append((char) (T.charAt(i) ^ key));
            }
        } else {
            // 문제 조건상 항상 validKey이므로 여기서는 처리 안해도 됨
            System.out.println("Invalid key");
            return;
        }

        System.out.println(sb.toString());
        br.close();
    }
}

마무리

코드와 설명이 부족할수 있습니다. 코드를 보시고 문제가 있거나 코드 개선이 필요한 부분이 있다면 댓글로 말해주시면 감사한 마음으로 참고해 코드를 수정 하겠습니다.

profile
Junior backend developer

0개의 댓글