암호 해독기 II

면접 대비

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

요약
입력된 여러 줄 중 팬그램 'the quick brown fox jumps over the lazy dog'을 같은 치환으로 암호화한 줄을 찾아 치환표를 복원하고, 나머지 줄을 모두 복호화한다.
난이도

보통10점 중 4점

유형
문자열, 해시맵, 구현, 시뮬레이션
정답자
아직 제출이 없습니다

문제

글을 암호화하는 간단하지만 안전하지 않은 방법 중 하나는 알파벳 글자들을 서로 뒤바꾸는 것이다. 즉, 원문에서 어떤 글자는 항상 정해진 다른 한 글자로 바뀐다. 복호화가 가능해야 하므로, 서로 다른 두 글자가 같은 글자로 바뀌는 일은 없다(치환은 소문자 26글자에 대한 일대일 대응이다).

이런 암호를 푸는 고전적인 방법으로 알려진 평문 공격(known-plaintext attack) 이 있다. 공격자는 평문을 이미 알고 있는 문장의 암호문을 손에 넣고, 암호문과 평문의 대응 관계로부터 치환 규칙을 알아낸다.

같은 치환 규칙으로 암호화된 여러 줄이 주어진다. 그중 한 줄은 다음 평문을 암호화한 것임이 알려져 있다.

the quick brown fox jumps over the lazy dog

이 문장은 알파벳 26글자를 모두 사용하는 팬그램(pangram)이므로, 이 문장과 그 암호문을 맞춰 보면 치환표 전체가 하나로 정해진다. 그 치환표를 이용해 입력의 모든 줄을 복호화하라.

입력

입력은 여러 줄로 이루어진다. 암호화된 각 줄은 소문자와 공백만으로 이루어지며, 길이는 최대 80글자이다. 줄은 최대 100개이며, 입력은 파일 끝에서 끝난다.

출력

각 입력 줄을, 알려진 평문에서 알아낸 치환표로 복호화하여 한 줄씩 출력하라. 평문이 팬그램이므로 치환표와 복호화 결과는 유일하게 정해진다.

어떤 줄도 알려진 평문의 암호문이 될 수 없어 일관된 치환표를 만들 수 없다면, 다음 한 줄만 출력하라.

No solution.

예제3

  1. 예제 1

    입력
    vtz ud xnm xugm itr pyy jttk gmv xt otgm xt xnm puk ti xnm fprxq
    xnm ceuob lrtzv ita hegfd tsmr xnm ypwq ktj
    frtjrpgguvj otvxmdxd prm iev prmvx xnmq
    
    예상 출력
    now is the time for all good men to come to the aid of the party
    the quick brown fox jumps over the lazy dog
    programming contests are fun arent they
    
  2. 예제 2

    입력
    wkh txlfn eurzq ira mxpsv ryhu wkh odcb grj
    
    예상 출력
    the quick brown fox jumps over the lazy dog
    
  3. 예제 3

    입력
    hello world
    foo bar baz
    no pangram here at all
    
    예상 출력
    No solution.