BOJ 9322 - 철벽 보안 알고리즘 (Python)

조민수·2024년 5월 9일
0

BOJ

목록 보기
52/64
post-custom-banner

S4, 문자열, 해싱


문제

한 단어는 1~10개의 대문자(A-Z)들로 이루어진 문자열이다. 한 문장은 공백으로 구분된 단어들로 이루어졌다.

제 1 공개키는 최대 한 번만 사용된 단어들로 되어있다.

제 2 공개키는 제 1 공개키의 단어들을 재배치하여 만들어진다.

평문(암호화 되지 않은 문장)은 제 1 공개키와 같이 여러 단어들로 되어있지만, 제 1 공개키와 다르게 각 단어들은 중복이 가능하다.

암호문(암호화 된 문장)은 평문을 제 2 공개키를 만든 규칙의 반대로 재배치하여 만들어진다.

주어진 2개의 공개키와 암호문으로 평문을 복구하라.


풀이

  • 문제 이해가 더 걸렸다.
  • tmp를 굳이 sorted로 받을 필요는 없는 것 같다.
from sys import stdin
from collections import defaultdict
t = int(stdin.readline())

for _ in range(t):
    n = int(stdin.readline())
    oneKey = list(map(str, stdin.readline().split()))
    twoKey = list(map(str, stdin.readline().split()))
    message = list(map(str, stdin.readline().split()))

    dic = defaultdict(int)
    for i in range(n):
        dic[i] = twoKey.index(oneKey[i])

    rev_dic = defaultdict(int)
    for a, b in dic.items():
        rev_dic[b] = a

    tmp = sorted(rev_dic.items())
    res = ['']*n
    for a, b in tmp:
        res[b] = message[a]

    print(*res)
profile
사람을 좋아하는 Front-End 개발자
post-custom-banner

0개의 댓글