코딩테스트/Python
[프로그래머스] [3차] 압축
yo~og
2021. 9. 9. 17:05
내 코드
def solution(msg):
answer = []
dic={}
s = ""
for j,c in enumerate([chr(ord('A')+i) for i in range(26)]):
dic[c] = j+1
i=27
for m in msg:
s+=m
if s not in dic:
answer.append(dic[s[:-1]])
dic[s] = i
i+=1
s=s[-1]
answer.append(dic[s])
return answer
영단어 딕셔너리를 만들어준다음 msg를 돌아가면서 딕셔너리에 있는지 확인한다. 딕셔너리에 없으면 answer에 마지막 문자를 뺀 문자를 딕셔너리에 넣어 append한다. 딕셔너리에 26이후숫자를 붙여주기 위해서 27부터 i를 설정한다. s는 마지막 단어만 저장시킨다. 가장 마지막은 answer에 저장이되지 않기 때문에 answer에 따로 추가시켜주었다.
다른사람 코드
def solution(msg):
answer = []
tmp = {chr(e + 64): e for e in range(1, 27)}
num = 27
while msg:
tt = 1
while msg[:tt] in tmp.keys() and tt <= msg.__len__():
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
딕셔너리를 저런식으로도 만들어줄수있다!!
밑에 코드는 내가 더 깔끔한듯??