본문 바로가기

Coding Test/Programmers

[프로그래머스/파이썬] [3차] 압축

728x90

 

 

나의 풀이

from string import ascii_uppercase as alphabet

def solution(msg):
    answer = []
    dictionary = dict()

    for n, l in enumerate(alphabet):
        dictionary[l] = n + 1

    while msg:
        for i in range(len(msg), 0, -1):
            if msg[:i] in dictionary:
                answer.append(dictionary[msg[:i]])
                if i < len(msg):
                    dictionary[msg[:i + 1]] = len(dictionary) + 1
                msg = msg[i:]
                break

    return answer

 - slicing에서 index error가 발생하지 않으니 'if i < len(msg):'는 생략 가능. (마지막이라 오류 일으킬 가능성 X)

 

 

 

다른 풀이 1

def solution(msg):
    answer = []
    tmp = {chr(e + 64): e for e in range(1, 27)}
    num = 27
    while msg:
        tt = 1
        while msg[:tt] in tmp.keys() and tt <= msg.__len__():
            tt += 1
        tt -= 1
        if msg[:tt] in tmp.keys():
            answer.append(tmp[msg[:tt]])
            tmp[msg[:tt + 1]] = num
            num += 1
        msg = msg[tt:]
    return answer

 

 

 

 

 

 

 

반응형