출처: 프로그래머스 코딩 테스트 연습, [프로그래머스] [3차] 압축
1. chr(숫자)
으로 단어와 색인번호에 해단하는 해시를 만든다.
2. 현재입력이 마지막 한 글자일때 다음글자는 없기 때문에 현재글자와 다음글자가 같아지는 오류가 있어 msg
마지막에 @
을 넣어서 이런 경우를 막았다.
3. 해시에 현재 입력 글자가 존재할 때까지 반복하여 존재하지 않기 직전까지 구하고 만약 더 글자가 길어졌다면 길어진 만큼 i
을 더하여 건너뛴다.
def solution(msg):
dict, last = {chr(65 + i) : i + 1 for i in range(26)}, 26
answer = []
i, n = 0, len(msg)
msg += '@'
while i < n:
w, j = msg[i], 2
c = msg[i:i + j]
while c in dict:
j += 1
w, c = c, msg[i:i + j]
dict[c] = last + 1
last += 1
i += j - 1
answer.append(dict[w])
return answer
카카오 문제는 레벨2도 어렵다고 느꼈는데 이번 문제는 비교적 착해서 놀랐다.