만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

리프로그 암호화

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

요약
주어진 키의 각 글자가 정하는 간격에 따라 빈 칸을 번갈아 건너뛰며 글자를 채워 암호화하거나 복호화합니다.
난이도

보통10점 중 4점

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

문제

새로운 암호화 방식을 만들었고, 이를 리프로그 암호화(Leapfrog Encryption)라고 부른다. 이 방식은 알파벳 키가 평문(암호화할 텍스트)의 글자를 암호문(암호화된 결과 문자열)의 어디에 배치할지 정하는 키 기반 방식이다. 리프로그 암호화는 다음과 같이 동작한다.

  1. 평문에서 알파벳이 아닌 문자를 모두 제거하고, 남은 글자를 모두 소문자로 바꾼다.
  2. 키의 각 글자를 알파벳에서의 위치 +1+ 1로 바꾼다('a'는 2, 'b'는 3으로 바꾼다). 이렇게 얻은 수열을 d1,d2,…,dnd_1, d_2, \ldots, d_n이라 하며, nn은 키의 길이이다.
  3. 평문의 첫 글자부터 왼쪽에서 오른쪽으로, 암호문의 d1d_1번째 자리마다 글자를 넣는다. 자리가 없어질 때까지 계속한다. 암호문의 길이는 평문의 글자 수와 같다. 예를 들어 d1=5d_1=5이면 평문의 첫 글자는 암호문의 5번째 자리에 들어가고(첫 자리를 1번으로 센다), 두 번째 글자는 10번째 자리에 들어가는 식이다.
  4. 이번에는 d2d_2로 같은 작업을 하되, 암호문을 오른쪽에서 왼쪽으로 훑는다. 빈 자리만 세며, 이미 글자가 들어간 자리는 건너뛴다.
  5. d3d_3, d4d_4 등으로 계속하며, 매번 훑는 방향을 번갈아 바꾼다.
  6. dnd_n을 사용한 뒤에도 평문에 글자가 남아 있으면, 남은 빈 자리를 직전 작업과 반대 방향으로 훑으며 남은 글자로 채운다. (이는 dn+1=1d_{n+1} = 1인 경우와 같다.)

예를 들어 평문이 "Send more monkeys!"이고 키가 "bea"이면 암호화 과정은 다음과 같다.

b →\rightarrow 3, 왼쪽에서 오른쪽으로:_ _ s _ _ e _ _ n _ _ d _ _ m
e →\rightarrow 6, 오른쪽에서 왼쪽으로:_ _ s _ _ e o _ n _ _ d _ _ m
a →\rightarrow 2, 왼쪽에서 오른쪽으로:_ r s _ e e o _ n m _ d o _ m
마지막 작업, 오른쪽에서 왼쪽으로:s r s y e e o e n m k d o n m

복호화 방법은 여러분이 직접 알아내도록 남겨 둔다.

입력

입력의 첫 줄에는 문자열 tt와 kk가 주어진다. tt는 E 또는 D이며, 각각 암호화 또는 복호화를 뜻한다. kk는 소문자 알파벳으로 이루어진 키이고, 길이는 1 이상 100 이하이다.

둘째 줄에는 암호화할 평문(tt가 E인 경우) 또는 복호화할 암호문(tt가 D인 경우)이 주어진다. 문자열은 비어 있지 않고, 최대 길이는 2,000이다. 암호문은 소문자로만 이루어진다. 평문에는 대문자, 숫자, 문장 부호, 공백이 포함될 수 있으며, 이들도 모두 길이에 포함된다. 평문에는 알파벳이 적어도 한 글자 들어 있다.

출력

암호화 또는 복호화된 텍스트를 출력한다. 출력에는 소문자만 포함된다.

예제3

  1. 예제 1

    입력
    E bea
    Send more monkeys!
    
    예상 출력
    srsyeeoenmkdonm
    
  2. 예제 2

    입력
    D bea
    srsyeeoenmkdonm
    
    예상 출력
    sendmoremonkeys
    
  3. 예제 3

    입력
    D zyxwvutsrqponmlkjihgfedcba
    lafogrpe
    
    예상 출력
    leapfrog