나의 풀이
def solution(msg):
# 알파벳 사전을 만들기 위한 스트링
alphabet_string = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
# 알파벳 사전 만들기... enumerate는 0부터 시작해서 1씩 더해줌
_dict = {}
for i, a in enumerate(alphabet_string):
_dict[a] = i+1
answer = []
l = 0
r = l+1
# msg[l:r]이 이미 사전에 있으면 하나 더 해줌 (K->KA)
# 없으면 (KA) 사전에 넣어주고 이전 글자 (K)를 answer에 더해줌
# 다만 이미 사전에 있어도 마지막인 경우 (KAKAO 중 O) answer에 더해주지 않아서 따로 처리해줌
while r <= len(msg):
if msg[l:r] in _dict:
if r == len(msg):
answer.append(_dict[msg[l:r]])
r += 1
else:
_dict[msg[l:r]] = len(_dict) + 1
answer.append(_dict[msg[l:r-1]])
l = r-1
r = l+1
return answer
다른사람 풀이
def solution(msg):
answer = []
# chr를 활용하여 알파벳 사전 구축
tmp = {chr(e + 64): e for e in range(1, 27)}
num = 27 # map의 value
while msg:
tt = 1
while msg[:tt] in tmp.keys() and tt <= msg.__len__(): # 현재 존재하는 key 찾기
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