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