아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

암호

면접 대비

시간 제한1초메모리 제한512 MB

요약
카이사르 암호로 암호화된 메시지에 대해 26가지 시프트를 모두 시도하여 알려진 위협 및 비위협 단어와 가장 많이 일치하는 시프트를 찾고, 평문과 일치 비율을 출력한다.
난이도

보통10점 중 5점

유형
문자열, 완전 탐색, 해시맵, 구현
정답자
아직 제출이 없습니다

문제

당신은 여러 위협을 찾아내기 위해 메시지를 분석하는 일을 맡았다. 하지만 메시지는 암호화되어 있다. 다행히도 메시지는 카이사르 암호로만 암호화되어 있는데, 이는 평문의 각 글자가 알파벳에서 고정된 수만큼 뒤로 이동한다는 뜻이다. 알파벳은 순환하므로 z 다음은 a이고, Z 다음은 A이다. 예를 들어 시프트 5로 암호화한 메시지 "How are you?"는 "Mtb fwj dtz?"가 된다. 메시지를 복호화하려면 글자를 반대 방향으로 이동하면 된다.

각 메시지에 대해 키(시프트 값)와 주어진 암호문에 대응하는 평문을 알아내야 한다. 이를 위해 알려진 위협 단어 목록과 알려진 비위협 단어 목록이 주어진다. 이 목록의 단어와 일치하는지 확인할 때는 대소문자를 구분하지 않는다. 예를 들어 "word"는 "Word"와 일치한다. 어떤 키가 다른 어떤 키보다 알려진 단어(위협 및 비위협)를 더 많이 만들어 내면 그 키를 올바르게 추측한 것으로 본다. 이 문제에서 단어는 A-Z 및/또는 a-z 문자 1 ≤ x ≤ 20개가 연속으로 이어진 것이다. 다른 모든 문자는 시프트의 영향을 받지 않으며 평문과 암호문에서 동일하다. 모든 메시지(평문과 암호문 모두)는 공백을 포함한 출력 가능한 문자로만 이루어진다.

입력

입력의 첫 줄에는 테스트 케이스의 수 C(1 ≤ C ≤ 50)가 주어진다. 각 테스트 케이스는 알려진 비위협 단어의 수 G(1 ≤ G ≤ 50)가 있는 줄로 시작한다. 다음 G개 줄에는 각각 소문자 비위협 단어가 하나씩 주어진다. 그다음 줄에는 알려진 위협 단어의 수 B(1 ≤ B ≤ 50)가 주어진다. 다음 B개 줄에는 각각 소문자 위협 단어가 하나씩 주어진다. 그다음 줄에는 1 ≤ y ≤ 1000개의 문자로 이루어진 암호문 메시지가 주어진다. 어떤 줄에도 앞뒤 공백은 없다.

출력

각 테스트 케이스는 한 줄 또는 두 줄을 출력한다.

키와 평문을 알아낼 수 있으면 첫 번째 줄에 원래 암호문의 대소문자와 문장 부호를 그대로 유지한 평문 메시지를 출력하고, 두 번째 줄에 "Shift: S, Match: M%, Threat: T%"를 출력한다. 여기서 S(0 ≤ S < 26)는 평문을 암호화하기 위해 이동한 문자 수, M은 평문의 단어 중 알려진 단어(위협 및 비위협)의 비율을 나타내는 정수, T는 평문의 단어 중 위협 단어의 비율을 나타내는 정수이다. 모든 백분율은 가장 가까운 1%로 반올림한다.

키와 평문을 알아낼 수 없으면 "Unable to decipher" 한 줄만 출력한다.

예제1

  1. 예제 1

    입력
    2
    11
    a
    also
    from
    if
    it
    keep
    must
    to
    want
    you
    yourself
    2
    hide
    secret
    Vs lbh jnag gb xrrc n frperg, lbh zhfg nyfb uvqr vg sebz lbhefrys.
    12
    a
    brother
    darkness
    destruction
    is
    it
    language
    mind
    of
    the
    thing
    words
    3
    beautiful
    freedom
    truth
    Hs'r z adztshetk sghmf, sgd cdrsqtbshnm ne vnqcr.
    
    예상 출력
    If you want to keep a secret, you must also hide it from yourself.
    Shift: 13, Match: 100%, Threat: 14%
    It's a beautiful thing, the destruction of words.
    Shift: 25, Match: 89%, Threat: 11%