코딩테스트/Python

[프로그래머스] [3차] 압축

yo~og 2021. 9. 9. 17:05

내 코드

def solution(msg):
    answer = []
    dic={}
    s = ""
    for j,c in enumerate([chr(ord('A')+i) for i in range(26)]):
        dic[c] = j+1

    i=27
    
    for m in msg:
        s+=m
        if s not in dic:
            answer.append(dic[s[:-1]])
            dic[s] = i
            i+=1
            s=s[-1]
    answer.append(dic[s])

    return answer

영단어 딕셔너리를 만들어준다음 msg를 돌아가면서 딕셔너리에 있는지 확인한다. 딕셔너리에 없으면 answer에 마지막 문자를 뺀 문자를 딕셔너리에 넣어 append한다. 딕셔너리에 26이후숫자를 붙여주기 위해서 27부터 i를 설정한다. s는 마지막 단어만 저장시킨다. 가장 마지막은 answer에 저장이되지 않기 때문에 answer에 따로 추가시켜주었다.

 

다른사람 코드

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

딕셔너리를 저런식으로도 만들어줄수있다!!

밑에 코드는 내가 더 깔끔한듯??