https://programmers.co.kr/learn/courses/30/lessons/17684
cur, next 인덱스 포인터를 두어, 사전에서 현재 입력과 일치하는 가장 긴 문자열(w)을 찾은 뒤 색인 번호를 출력하였다.
다음 글자(c)가 남아있는 경우 (w+c)를 사전에 등록하였다.
def solution(msg):
answer = []
dict = {}
for i in range(26):
dict[chr(65 + i)] = i + 1
cur, next = 0, 0 #현재 글자 idx, next글자 idx
while True:
next += 1
# 다음 글자가 남아있지 않다면
if next == len(msg):
# w 출력하고 while문 탈출
answer.append(dict[msg[cur:next]])
break
# 다음 글자가 남아있고(c), 사전에 등록되어 있지 않다면
if msg[cur:next+1] not in dict:
# w+c 사전에 등록
dict[msg[cur:next+1]] = len(dict)+1
# w 출력
answer.append(dict[msg[cur:next]])
cur = next
return answer
정확성 테스트
테스트 1 〉 통과 (0.01ms, 10.2MB)
테스트 2 〉 통과 (0.02ms, 10.3MB)
테스트 3 〉 통과 (0.01ms, 10.3MB)
테스트 4 〉 통과 (0.18ms, 10.3MB)
테스트 5 〉 통과 (0.02ms, 10.2MB)
테스트 6 〉 통과 (0.53ms, 10.3MB)
테스트 7 〉 통과 (0.26ms, 10.4MB)
테스트 8 〉 통과 (0.28ms, 10.3MB)
테스트 9 〉 통과 (0.01ms, 10.2MB)
테스트 10 〉 통과 (0.27ms, 10.3MB)
테스트 11 〉 통과 (0.18ms, 10.3MB)
테스트 12 〉 통과 (0.30ms, 10.3MB)
테스트 13 〉 통과 (0.40ms, 10.3MB)
테스트 14 〉 통과 (0.59ms, 10.3MB)
테스트 15 〉 통과 (0.40ms, 10.3MB)
테스트 16 〉 통과 (0.32ms, 10.2MB)
테스트 17 〉 통과 (0.26ms, 10.2MB)
테스트 18 〉 통과 (0.10ms, 10.3MB)
테스트 19 〉 통과 (0.12ms, 10.3MB)