동캄의 코딩도장

프로그래머스 level2 [압축] 파이썬 본문

코테/프로그래머스

프로그래머스 level2 [압축] 파이썬

동 캄 2021. 12. 2. 14:01

https://programmers.co.kr/learn/courses/30/lessons/17684

 

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

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

programmers.co.kr

#프로그래머스 압축

def solution(msg):
    msg=list(map(str,msg))
    answer = []
    dic={'A':1,'B':2,'C':3,'D':4,'E':5,'F':6,'G':7,'H':8,'I':9,'J':10,'K':11,'L':12,'M':13,'N':14,'O':15,'P':16,'Q':17,'R':18,'S':19,'T':20,'U':21,'V':22,'W':23,'X':24,'Y':25,'Z':26}
    i=0
    while i<len(msg):
        s=''
        s+=msg[i]
        while i<(len(msg)-1) and s in dic:
            i+=1
            s+=msg[i]
        if len(s)==1:
            answer.append(dic[s])
            i+=1
        elif s in dic:
            answer.append(dic[s])
            i+=1
        else:
            answer.append(dic[s[:-1]])
            dic[s]=len(dic)+1
    return answer

dic의 초기값을 세팅하고, s에 값을 삽입한다. 길이가 1이면, answer에 index값을 삽입하고, i가 msg의 마지막 index이면 (if문에서 s가 dic에 속하면) answer에 index값을 삽입한다. 그 경우가 아니라면 s를 dic의 값을 추가하고, dic에 있는 index값을 answer에 삽입한다.

더 좋은 코드가 있을 거 같은데 잘 못풀었다...