오늘의 공부 키워드

  • 2325 Decode the Message

2325 Decode the Message

문제 해석

문자열 key와 message가 주어집니다. 이들은 각각 암호 키와 비밀 메시지를 나타냅니다. 메시지를 해독하기 위한 단계는 다음과 같습니다:

  1. key에서 처음 등장하는 모든 26개의 소문자를 사용하여 치환 테이블의 순서를 만듭니다.
  2. 치환 테이블을 일반 영어 알파벳과 정렬합니다.
  3. 그런 다음 메시지의 각 문자는 테이블을 사용하여 치환됩니다.
  4. 공백(' ')은 그대로 유지됩니다.

예를 들어, key = "the quick brown fox jumps over the lazy dog"와 message = "vkbs bs t suepuv"가 주어졌을 때, 치환 테이블은 다음과 같습니다: ('t' -> 'a', 'h' -> 'b', 'e' -> 'c', ...).

이 문제의 제약 조건은 다음과 같습니다:

  • 26 <= key.length <= 2000
  • key는 소문자 영어 알파벳과 공백(' ')으로 구성됩니다.
  • key는 영어 알파벳의 모든 글자('a'부터 'z'까지)를 적어도 한 번 포함합니다.
  • 1 <= message.length <= 2000
  • message는 소문자 영어 알파벳과 공백(' ')으로 구성됩니다.

풀이 방법

  1. 키 처리:
    • key 문자열에서 처음 등장하는 26개의 소문자를 순서대로 추출합니다.
    • 이 순서대로 치환 테이블을 만듭니다.
    • 예를 들어, key = "the quick brown fox jumps over the lazy dog"일 경우, 처음 등장하는 순서대로 't', 'h', 'e', 'q', 'u', 'i', 'c', 'k', 'b', 'r', 'o', 'w', 'n', 'f', 'x', 'j', 'm', 'p', 's', 'v', 'l', 'a', 'z', 'y', 'd', 'g'가 됩니다.
  2. 치환 테이블 생성:
    • 알파벳 순서와 위에서 추출한 문자를 매핑하여 치환 테이블을 만듭니다.
    • 예를 들어, 't'는 'a', 'h'는 'b', 'e'는 'c'와 같이 매핑됩니다.
  3. 메시지 변환:
    • 주어진 메시지의 각 문자를 치환 테이블을 사용하여 변환합니다.
    • 공백은 그대로 둡니다.
  4. 결과 출력:
    • 변환된 메시지를 출력합니다.

코드

def decode_message(key, message):
    # 1. 키 처리: key에서 처음 등장하는 26개의 소문자 추출
    seen = set()
    substitution_order = []
    for char in key:
        if char.isalpha() and char not in seen:
            seen.add(char)
            substitution_order.append(char)
        if len(substitution_order) == 26:
            break
    
    # 2. 치환 테이블 생성
    substitution_table = {substitution_order[i]: chr(97 + i) for i in range(26)}
    
    # 3. 메시지 변환
    decoded_message = []
    for char in message:
        if char in substitution_table:
            decoded_message.append(substitution_table[char])
        else:
            decoded_message.append(char)
    
    # 4. 결과 출력
    return ''.join(decoded_message)

# 예제 입력
key = "the quick brown fox jumps over the lazy dog"
message = "vkbs bs t suepuv"
print(decode_message(key, message))  # "this is a secret"

 

위 코드는 주어진 key와 message를 사용하여 메시지를 해독하는 방법을 보여줍니다. 첫 번째로 key에서 치환 테이블을 만들고, 이를 사용하여 message를 변환합니다. 이 과정을 통해 중학생도 이해할 수 있도록 쉽게 설명하였습니다.

 

오늘의 회고

 

  • 부족함을 느끼지만 실력을 늘리는것이 제일 빠른길임을 명심하자
  • 새로운 개념을 배울수 있어서 좋았다.
  • 생각보다 긴 코드라서 배우고 있는 입장에서 정말 어려웠다

+ Recent posts