리프로그 암호화
시간 제한1초메모리 제한2048 MB
주어진 키의 각 글자가 정하는 간격에 따라 빈 칸을 번갈아 건너뛰며 글자를 채워 암호화하거나 복호화합니다.
문제
새로운 암호화 방식을 만들었고, 이를 리프로그 암호화(Leapfrog Encryption)라고 부른다. 이 방식은 알파벳 키가 평문(암호화할 텍스트)의 글자를 암호문(암호화된 결과 문자열)의 어디에 배치할지 정하는 키 기반 방식이다. 리프로그 암호화는 다음과 같이 동작한다.
- 평문에서 알파벳이 아닌 문자를 모두 제거하고, 남은 글자를 모두 소문자로 바꾼다.
- 키의 각 글자를 알파벳에서의 위치 로 바꾼다('a'는 2, 'b'는 3으로 바꾼다). 이렇게 얻은 수열을 이라 하며, 은 키의 길이이다.
- 평문의 첫 글자부터 왼쪽에서 오른쪽으로, 암호문의 번째 자리마다 글자를 넣는다. 자리가 없어질 때까지 계속한다. 암호문의 길이는 평문의 글자 수와 같다. 예를 들어 이면 평문의 첫 글자는 암호문의 5번째 자리에 들어가고(첫 자리를 1번으로 센다), 두 번째 글자는 10번째 자리에 들어가는 식이다.
- 이번에는 로 같은 작업을 하되, 암호문을 오른쪽에서 왼쪽으로 훑는다. 빈 자리만 세며, 이미 글자가 들어간 자리는 건너뛴다.
- , 등으로 계속하며, 매번 훑는 방향을 번갈아 바꾼다.
- 을 사용한 뒤에도 평문에 글자가 남아 있으면, 남은 빈 자리를 직전 작업과 반대 방향으로 훑으며 남은 글자로 채운다. (이는 인 경우와 같다.)
예를 들어 평문이 "Send more monkeys!"이고 키가 "bea"이면 암호화 과정은 다음과 같다.
복호화 방법은 여러분이 직접 알아내도록 남겨 둔다.
입력
입력의 첫 줄에는 문자열 와 가 주어진다. 는 E 또는 D이며, 각각 암호화 또는 복호화를 뜻한다. 는 소문자 알파벳으로 이루어진 키이고, 길이는 1 이상 100 이하이다.
둘째 줄에는 암호화할 평문(가 E인 경우) 또는 복호화할 암호문(가 D인 경우)이 주어진다. 문자열은 비어 있지 않고, 최대 길이는 2,000이다. 암호문은 소문자로만 이루어진다. 평문에는 대문자, 숫자, 문장 부호, 공백이 포함될 수 있으며, 이들도 모두 길이에 포함된다. 평문에는 알파벳이 적어도 한 글자 들어 있다.
출력
암호화 또는 복호화된 텍스트를 출력한다. 출력에는 소문자만 포함된다.