점진적 뒤섞기
면접 대비시간 제한2초메모리 제한512 MB
심볼 값의 누적 합을 27로 나눈 나머지로 메시지를 암호화하고, 같은 점화식을 거꾸로 풀어 복호화한다.
문제
어떤 첩보 기관은 통신을 지키려고 아주 단순한 암호 알고리즘을 쓴다. 이 알고리즘은 메시지의 각 기호를 앞선 기호에 따라 점진적으로 바꾼다. 쓸 수 있는 기호는 공백과 영어 소문자 26개다. 암호화를 위해 공백에 0을, a부터 z까지에 1부터 26까지를 대응시킨다. 기호 의 값은 로 쓴다.
기호가 인 메시지를 생각하자. 알고리즘은 먼저 첫 기호 을 값 로 바꾼다. 이어서 뒤따르는 각 기호 에 대해 을 계산한다. 자기 값과 바로 앞 기호의 계산값을 더하는 것이다. (메시지에 공백이 있으면 앞에서 뒤섞인 글자가 한 번 더 나온다.) 모든 가 나올 때까지 이 과정을 반복한다.
이제 메시지는 수의 나열이다. 출력하려면 다시 기호로 되돌려야 한다. 기호가 27개이므로 를 27로 나눈 나머지를 구하고, 그 나머지에 대응하는 기호로 바꾼다. 예를 들어 이면 이고 이므로 기호는 e다.
문자열 "my pie"를 암호화하는 과정은 다음과 같다.
- 각 기호 를 로 바꾼다:
[13, 25, 0, 16, 9, 5] - 각 를 계산한다:
[13, 38, 38, 54, 63, 68] - 각 를 27로 나눈 나머지를 구한다:
[13, 11, 11, 0, 9, 14] - 다시 기호로 바꾼다: "mkk in"
텍스트를 이 알고리즘으로 암호화하고, 이 알고리즘으로 암호화된 텍스트를 복호화하는 프로그램을 작성하라.
입력
첫 줄에 정수 이 주어진다 (). 이어지는 개의 줄은 각각 문자 e 또는 d, 공백 한 칸, 그리고 줄 끝까지 이어지는 메시지로 이루어진다. 메시지는 영어 소문자와 공백으로만 이루어지며 길이는 1자 이상 80자 이하다. e는 뒤따르는 문자열을 암호화하라는 뜻이고, d는 복호화하라는 뜻이다.
출력
입력에 주어진 각 메시지를 암호화하거나 복호화한 결과를 한 줄에 하나씩 출력한다. 이 문제에서는 공백의 차이도 결과를 가른다. 따라서 공백까지 포함해 정답과 한 글자도 다르지 않게 출력해야 한다.