Algorithm/릿코드

99클럽 코테 스터디 21일차 2325. Decode the Message

Albosa2lol 2024. 6. 20. 04:40

https://leetcode.com/problems/decode-the-message/

 

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

  1. key에서 처음 등장하는 모든 26개의 소문자 영어 알파벳을 사용하여 대체 테이블의 순서를 정합니다. 이는 key의 각 문자가 알파벳의 어떤 문자로 변환될지 결정합니다.
  2. 대체 테이블을 정렬된 영어 알파벳과 맞춥니다. 즉, key의 첫 번째 고유 문자는 'a'에, 두 번째 고유 문자는 'b'에 매핑됩니다. 이렇게 해서 'z'까지 매핑합니다.
  3. message의 각 문자는 이 대체 테이블을 사용하여 변환됩니다.
  4. 공백 문자 ' '는 그대로 유지됩니다.

예를 들어, 주어진 key = "happy boy"인 경우 (실제 key는 알파벳의 각 문자가 적어도 한 번씩 등장해야 합니다), 부분 대체 테이블은 ('h' -> 'a', 'a' -> 'b', 'p' -> 'c', 'y' -> 'd', 'b' -> 'e', 'o' -> 'f')와 같습니다.

이 대체 테이블을 사용하여 message를 해독한 결과를 반환합니다.

 

 

 

풀이

class Solution:
    def decodeMessage(self, key: str, message: str) -> str:
        # 매핑 딕셔너리를 생성
        mapping = {}
        current_char = 'a'
        
        for char in key:
            # 공백이 아니고 아직 매핑되지 않은 문자일 경우
            if char != ' ' and char not in mapping:
                mapping[char] = current_char
                current_char = chr(ord(current_char) + 1)
                if current_char > 'z':  # 'z'를 초과하면 멈춤
                    break
        
        # 매핑을 사용하여 메시지를 해독
        decoded_message = []
        for char in message:
            if char == ' ':
                decoded_message.append(' ')
            else:
                decoded_message.append(mapping[char])
        
        return ''.join(decoded_message)