W의 암호

면접 대비

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

요약
세 문자 그룹을 각각 추출해 해당 키만큼 오른쪽으로 회전시켜 암호문을 복호화한다.
난이도

쉬움10점 중 3점

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

문제

메모리가 매우 작은 소형 무선 기기의 통신을 보호하기 위해 다음과 같은 간단한 암호를 사용한다. 이 암호를 구현하라.

암호화에는 세 개의 정수 키 k1k_1, k2k_2, k3k_3가 필요하다. 문자는 세 그룹으로 나뉜다. 알파벳 [a-i]가 첫 번째 그룹, [j-r]가 두 번째 그룹, 나머지 문자([s-z]와 밑줄 _)가 세 번째 그룹이다. 한 그룹에 속한 문자들만 메시지에서 왼쪽부터 나타나는 순서대로 모은 뒤, 암호화는 이 부분 수열을 왼쪽으로 kik_i칸 회전시키고 회전된 문자들을 원래 위치에 그대로 다시 써 넣는다. 각 그룹은 서로 독립적으로 회전하며, 한 그룹을 회전해도 다른 그룹의 문자는 움직이지 않는다.

복호화는 이 과정을 되돌린다. 즉 각 그룹 안에서 부분 수열을 오른쪽으로 kik_i칸 회전시킨다.

예를 들어 메시지 the_quick_brown_fox를 키 k1=2k_1=2, k2=3k_2=3, k3=1k_3=1로 암호화하면 _icuo_bfnwhoq_kxert가 된다. 복호화하려면 암호문에서 [a-i] 그룹의 문자들을 보면 된다. 이들은 i, c, b, f, h, e이고 (1부터 세는) 위치 2, 3, 7, 8, 11, 17에 있다. k1=2k_1=2만큼 오른쪽으로 회전하면 이 위치들에는 h, e, i, c, b, f가 들어간다. 아래 표는 각 그룹을 차례로 복호화했을 때 메시지가 어떻게 바뀌는지 보여 준다.

단계회전 그룹회전 전회전 후
1[a-i], 오른쪽 k1=2k_1=2_icuo_bfnwhoq_kxert_heuo_icnwboq_kxfrt
2[j-r], 오른쪽 k2=3k_2=3_heuo_icnwboq_kxfrt_heuq_ickwbro_nxfot
3[s-z]와 _, 오른쪽 k3=1k_3=1_heuq_ickwbro_nxfotthe_quick_brown_fox

주어진 키와 암호문에 대해 복호화된 메시지를 출력하라.

입력

모든 문자열은 소문자와 밑줄(_)로만 이루어지며 길이는 최대 80자이다. 모든 kik_i는 1 이상 100 이하의 정수이다.

입력에는 하나 이상의 암호문이 주어진다. 각 암호문은 두 줄로 주어진다. 첫 줄에는 세 키 k1k_1, k2k_2, k3k_3가 공백으로 구분되어 있고, 둘째 줄에는 암호문이 있다. 입력의 끝은 키가 모두 0인 줄 0 0 0으로 표시되며, 이 줄은 처리하지 않는다.

출력

각 암호문에 대해 복호화된 문자열을 한 줄에 하나씩 출력한다.

예제2

  1. 예제 1

    입력
    2 3 1
    _icuo_bfnwhoq_kxert
    1 1 1
    bcalmkyzx
    3 7 4
    wcb_mxfep_dorul_eov_qtkrhe_ozany_dgtoh_u_eji
    2 4 3
    cjvdksaltbmu
    0 0 0
    
    예상 출력
    the_quick_brown_fox
    abcklmxyz
    the_quick_brown_fox_jumped_over_the_lazy_dog
    ajsbktcludmv
    
  2. 예제 2

    입력
    1 1 1
    bcdefghia
    0 0 0
    
    예상 출력
    abcdefghi