[BOJ 10914] Veni, vidi, vici

View as PDF

Submit solution

Points: 1
Time limit: 1.0s
Memory limit: 256M

Problem types
Allowed languages
Assembly, Awk, C, C++, Java, Pascal, Perl, Python, Sed, Text

원철이는 대한민국의 국방을 위한 암호학 시간에 카이사르 암호에 대해 배웠다. 카이사르 암호는 매우 유명한 암호체계로 매우 간단한 치환암호의 일종이다. 간단히 설명하면 다음과 같다.</p>

  1. a를 0, b를 1, ..., z를 25로 취급한다.
  2. 어떤 키 n을 가지고 번호 x를 암호화하면 y ≡ (x+n) mod 26이 된다. 예를 들어 n = 1인 경우 a는 b가 되고, b는 c가 되고, ..., z는 a가 된다.
  3. 암호화된 번호 y를 복호화하면 x ≡ (y-n) mod 26이 된다.

원철이는 이 암호의 단점도 같이 배웠다. 그것은 글자의 빈도수를 분석해 보는 것으로 암호가 쉽게 파악될 수 있다는 것이다. 똑똑한 원철이는 한 글자를 두 글자로 암호화하여 이러한 단점을 피할 수 있을 것이라고 생각했다. 즉 "x"를 어떤 "yz"로 암호화하겠다는 것이다. 원철이는 카이사르 암호와 비슷하게 "x"를 x ≡ (y+z-n) mod 26이 되는 "yz"로 암호화하는 방식을 원철 암호라고 하기로 했다. 만약 암호화해야 할 것이 글자가 아닌 단어라면, 단어의 맨 앞에서부터 차례대로 한 글자씩 암호화한 것을 순서대로 붙여서 사용하기로 했다.

그러나 원철이는 이런 식으로 암호화를 하게 되면 단어의 길이가 모두 짝수가 되므로 이 암호문이 원철 암호를 사용했다는 사실이 파악될 수 있다는 사실을 깨달았다. 그러므로 원철이는 암호화된 단어의 맨 뒤에 마음대로 더미(dummy) 글자를 한 글자 붙일 수도 있다.

원철이는 원철 암호를 생각한 뒤부터 일상생활의 모든 대화를 원철 암호로 하기 시작했다. 당신은 원철이가 하는 말을 알아 들을 수 있을까?

입력 형식

첫 번째 줄에는 암호화에 사용되는 키를 의미하는 정수 n (0 ≤ n < 26)이 주어진다.</p>

두 번째 줄은 100개 이하의 단어로 구성되어 있다. 각 단어의 길이는 2 이상 101 이하이고 영어 소문자('a'-'z')로만 구성되어 있으며 공백 하나로 구분되어 있다. 이 단어는 모두 원철 암호로 암호화된 단어이다.

출력 형식

입력에서 주어진 순서대로 원철 암호로 암호화된 단어를 복호화하여 공백 하나로 구분하여 출력한다.

예제 입력

2
axcexseg yzkansuqe mlssltqu

예제 출력

veni vidi vici

Comments

There are no comments at the moment.