[프로그래머스] 압축 문제풀이 python

mauz·2022년 6월 26일
0

🐒 문제

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

✍ 나의 풀이

def solution(msg):
    answer = []
    dic = dict()
    for i in range(1,27):
        dic[chr(64+i)] = i
    
    while msg:
        w = ''
        for i in range(len(msg)):
            w += msg[i]
            if w in dic:
                if w == msg:
                    answer.append(dic[w])
                    return answer
                continue
            else:
                answer.append(dic[w[:-1]])
                dic[w] = len(dic) + 1
                msg = msg[i:]
                break
    
    return answer

마지막 남은 문자열 처리법을 떠올리는데 시간을 많이 썼다.


🧠 문제 이해

key를 'A'~'Z', value를 1~26으로 하는 딕셔너리를 만든다.

앞으로 새로 만나는 문자열은 딕셔너리에 추가될 것이다.

입력이 msg = 'KAKAO'로 주어진다면

첫번째 'K'는 딕셔너리에 있다.

'K'다음 문자인 'A'를 같이 확인해보자.

'KA'는 딕셔너리에 없다. 'KA'= 27로 하여 딕셔너리에 추가한다.

딕셔너리에서 'K' 는 11 이다, 가져와 answer 에 넣는다.
(AKAO)


다음 'A'는 딕셔너리에 있다.

'A' 다음 문자인 'K'를 같이 확인해보자.

'AK'는 딕셔너리에 없다. 'KA' = 28 로 하여 딕셔너리에 추가한다.

딕셔너리에서 'A' 는 1 이다, 가져와 answer에 넣는다
(KAO)

다음 'K'는 딕셔너리에 있다.

'K' 다음 문자인 'A'를 같이 확인해보자.

'KA'는 딕셔너리에 있다.

'KA' 다음 문자인 'O'를 같이 확인해보자.

'KAO'는 딕셔너리에 없다. 'KAO' = 29로 하여 딕셔너리에 추가한다.

딕셔너리에서 'KA'는 27이다. answer에 넣는다.
(O)


다음 'O'는 딕셔너리에 있다.

이후 문자가 없으므로 딕셔너리에서 'O'의 값인 15를 answer에 넣는다.

answer = [11,1,27,15] 를 결과로 얻을 수 있다.

profile
쥐구멍에 볕드는 날

0개의 댓글