import sys
from collections import deque


def findanswer(secret, word_list):
    alpha_list = ['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']
    password = deque(alpha_list)
    for i in range(26):
        temp_answer = ""
        for char in secret:
            diff = ord(char) - ord('a')
            changed_char = password[diff]
            temp_answer += changed_char
        for word in word_list:
            if word in temp_answer:
                return temp_answer
        first_char = password.popleft()
        password.append(first_char)


secret = list(input())
count = int(input())
word_list = [sys.stdin.readline().strip() for i in range(count)]

print(findanswer(secret, word_list))

 

알파벳 리스트를 생성한 뒤에

암호문의 알파벳 순서를 구한다.

 

그 뒤에 알파벳리스트를 해독문으로 바꾸기 위해서

deque을 이용해서 맨앞에 있는 알파벳을 떼서, 뒤에 넣는다.

 

현실적으로 코딩테스트에 들어갔을 때 생각할 수 있을만한 정도의 알고리즘으로 사용

 

import sys
from collections import deque

secret = list(input())
count = int(input())
word_list = [sys.stdin.readline().strip() for i in range(count)]
alpha_list = ['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']
# aList = list(string.ascii_lowercase) 이렇게 표현가능
password = deque(alpha_list)
for i in range(26):
    temp_answer = ""
    for char in secret:
        diff = ord(char) - ord('a')
        changed_char = password[diff]
        temp_answer += changed_char
    for word in word_list:
        if word in temp_answer:
            print(temp_answer)
    first_char = password.popleft()
    password.append(first_char)

원래는 이렇게 짰는데, 히든케이스를 통과를 못한다...

예상하는 바로는 테스트케이스에 답이 2개 이상 있는걸로 추정되는데

확실하지는 않음..

 

요악

ord() -> 문자를 숫자로 변환한다.

chr() -> 숫자를 문자로 변환한다.

import string
aList = list(string.ascii_lowercase)

소문자 알파벳 리스트 생성하는법

'알고리즘' 카테고리의 다른 글

자바 코딩테스트  (0) 2024.05.24

+ Recent posts