알고리즘 풀이/프로그래머스

[Level 2] 압축

mhko411 2021. 9. 23. 23:10
728x90

https://programmers.co.kr/learn/courses/30/lessons/17684?language=python3 

 

코딩테스트 연습 - [3차] 압축

TOBEORNOTTOBEORTOBEORNOT [20, 15, 2, 5, 15, 18, 14, 15, 20, 27, 29, 31, 36, 30, 32, 34]

programmers.co.kr


접근

딕셔너리에 A ~ Z 까지를 Key로 각각 1 ~ 26까지의 Value를 짝지어서 저장하여 활용한다. msg를 탐색하면서 각각의 문자를 연결해 새로운 문자를 만들어내고 해당 문자가 딕셔너리에 존재하면 다음 문자도 이어붙인다. 하지만 딕셔너리에 존재하지 않는다면 현재 문자 중에 마지막 문자를 제외한 것을 딕셔너리에 찾아 해당 값을 answer에 저장하도록 한다.

그리고 현재의 문자를 새로운 Key로 설정한다.

 

구현

- A는 65, Z는 90이기 때문에 해당 숫자들을 탐색하여 딕셔너리에 저장할 키와 값을 생성한다.

- while문을 msg를 탐색하며 현재 idx가 가리키는 문자를 word에 추가한다.

- 만약 word가 딕셔너리에 존재하면 다음 문자를 가리키도록 idx를 증가시킨다.

- 존재하지 않는다면 현재 word 중에 마지막 문자를 제외한 문자를 딕셔너리에서 찾아 값을 answer에 추가한다.

- 그리고 word를 새롭게 딕셔너리에 추가하고 문자를 빈 문자열로 교체한다.

- while문이 종료되었을 때 마지막에 만들어진 문자를 키로 찾아 answer에 값을 추가한다.

def solution(msg):
    N = len(msg)
    answer = []
    table = dict()
    for i in range(65, 91):
        c = chr(i)
        n = ord(c) - ord('A') + 1
        table[c] = n
    
    word = ''
    idx = 0
    num = 27
    while idx < N:
        word += msg[idx]
        if word in table:
            idx += 1
        else:
            answer.append(table[word[:-1]])
            table[word] = num
            num += 1
            word = ''
    answer.append(table[word])
    return answer

'알고리즘 풀이 > 프로그래머스' 카테고리의 다른 글

[Level 2] 행렬의 곱셈  (0) 2021.09.27
[Level 2] 2개 이하로 다른 비트  (0) 2021.09.27
[Level 2] 쿼드압축 후 개수 세기  (0) 2021.09.15
[Level 2] n진수 게임  (0) 2021.09.13
[Level 3] 숫자 게임  (0) 2021.09.10