Decode the Message

제로콜라좋아요·2024년 6월 19일
0

algorithem

목록 보기
31/37

문제설명

주어진 문자열 key와 message는 각각 암호 키와 비밀 메시지를 나타냅니다. message를 해독하는 단계는 다음과 같습니다:

key에서 모든 26개의 소문자 알파벳의 첫 번째 출현을 사용하여 대체 테이블의 순서를 정합니다.
대체 테이블을 일반 영어 알파벳과 정렬합니다.
그런 다음 message의 각 문자는 테이블을 사용하여 대체됩니다.
공백 문자 ' '는 그대로 유지됩니다.
예를 들어, key = "happy boy" (실제 키에는 알파벳의 모든 글자가 최소한 한 번씩 포함됨)이 주어지면 부분 대체 테이블은 다음과 같습니다: ('h' -> 'a', 'a' -> 'b', 'p' -> 'c', 'y' -> 'd', 'b' -> 'e', 'o' -> 'f').

예시 1:

입력: key = "the quick brown fox jumps over the lazy dog", message = "vkbs bs t suepuv"
출력: "this is a secret"
설명: 위의 예시는 대체 테이블을 보여줍니다.
이는 "the quick brown fox jumps over the lazy dog"에서 각 문자의 첫 번째 출현을 취해 얻어집니다.

예시 2:

입력: key = "eljuxhpwnyrdgtqkviszcfmabo", message = "zwx hnfx lqantp mnoeius ycgk vcnjrdb"
출력: "the five boxing wizards jump quickly"
설명: 위의 예시는 대체 테이블을 보여줍니다.
이는 "eljuxhpwnyrdgtqkviszcfmabo"에서 각 문자의 첫 번째 출현을 취해 얻어집니다.
제약 조건
26 <= key.length <= 2000
key는 소문자 영어 알파벳과 공백으로 구성됩니다.
key에는 최소한 한 번씩 알파벳의 모든 글자('a'에서 'z'까지)가 포함됩니다.
1 <= message.length <= 2000
message는 소문자 영어 알파벳과 공백으로 구성됩니다.

문제풀이

class Solution:
    def decodeMessage(self, key: str, message: str) -> str:
        substitution_table = {}
        alphabet = "abcdefghijklmnopqrstuvwxyz"
        index = 0

        for char in key:
            if char not in substitution_table and char != ' ':
                substitution_table[char] = alphabet[index]
                index += 1
                if index >= 26: 
                    break

        decoded_message = []
        for char in message:
            if char == ' ':
                decoded_message.append(' ')
            else:
                decoded_message.append(substitution_table[char])

        return ''.join(decoded_message)
profile
개발자계의 제로콜라

0개의 댓글