본문 바로가기
Beakjoon&프로그래머스/Java

[백준/Java] 14584번 암호 해독

by 현장 2026. 1. 26.

-Code

import java.io.*;
import java.util.*;

public class BOJ14584 {
    static char[] alpa = {
            'a', 'b', 'c', 'd', 'e', 'f', 'g',
            'h', 'i', 'j', 'k', 'l', 'm', 'n',
            'o', 'p', 'q', 'r', 's', 't', 'u',
            'v', 'w', 'x', 'y', 'z'
    };

    public static void main(String[] args) throws IOException {
        BufferedReader br =
                new BufferedReader(new InputStreamReader(System.in));

        String incodeLine = br.readLine();
        // 변환된 라인을 알파벳 숫자로 작성
        int length = incodeLine.length();
        int[] lineIndex = new int[length];
        for (int i = 0; i < length; i++) {
            lineIndex[i] = incodeLine.charAt(i) - 'a';
        }
        // 주어진 단어 받기
        int cnt = Integer.parseInt(br.readLine());
        String[] words = new String[cnt];
        for (int i = 0; i < cnt; i++) {
            words[i] = br.readLine();
        }
        // 알파벳 위치를 1개씩 밀면서 확인
        StringBuilder sb = null;
        for (int i = 0; i < 26; i++) {
            sb = new StringBuilder();
            // 가지고 있는 알파벳의 위치를 i만큼 밀기
            for (int j = 0; j < length; j++) {
                sb.append(alpa[(lineIndex[j] + i) % 26]);
            }
            // 주어진 단어들 중 일치 하는 것이 있는지 확인
            boolean isTrue = false;
            for (int j = 0; j < cnt; j++) {
                if (sb.toString().contains(words[j])) {
                    isTrue = true;
                    break;
                }
            }
            // 있으면 바로 탈출
            if (isTrue) {
                break;
            }
        }
        // 출력
        System.out.println(sb);
    }
}