소희는 공개키와 개인키 한 쌍으로 보안을 유지하는 것이 매우 불편하다고 생각했다. 그래서 소희는 공개키만을 이용하는 암호화 체계를 개발했다. 이를 "철벽 보안 알고리즘"이라고 부르기로 했다. 알고리즘은 다음과 같다.
주어진 2개의 공개키와 암호문으로 평문을 복구하라.
입력의 첫 줄에는 테스트 케이스의 수를 의미하는 하나의 정수가 입력된다. 정수는 100을 넘지 않는다.
각 테스트케이스마다 아래 항목들을 한 줄씩 입력받는다.
모든 단어들은 최소 1개, 최대 10개의 대문자들로 이루어져있다.
각 케이스마다 암호문을 해독한 평문
을 한 줄에 줄력한다.
문제 도대체 뭐라는 거냐?
문제를 이해해보자
암호화 방법
을 거꾸로 적용딕셔너리
와 인덱스
를 사용해서 간단하게 재배열!제 1 공개키 ➡️ [ A, B, C, D ]
제 2 공개키 ➡️ [ D, A, B, C ]
암호문 ➡️ [ C, B, A, D ]
딕셔너리 d
= { 제 2 공개키 원소의 제 1 공개키에서의 위치 : 암호문 원소 }
➡️ d = {2:C, 1:B, 0:A, 3:D}
➡️ d
를 key 값
기준으로 정렬한 후 value 값
출력
➡️ 해독!
import sys
t = int(input())
for i in range(t):
plain = []
n = int(input())
pub_1 = list(sys.stdin.readline().split())
pub_2 = list(sys.stdin.readline().split())
cyper = list(sys.stdin.readline().split())
d = {}
for j in pub_2:
d[pub_1.index(j)] = cyper.pop(0)
sorted_d = " ".join(dict(sorted(d.items())).values())
print(sorted_d)