https://school.programmers.co.kr/learn/courses/30/lessons/17684
def solution(msg):
"""
LZW(Lempel–Ziv–Welch)
1. 길이가 1인 모든 단어를 포함하도록 사전을 초기화한다.
2. 사전에서 현재 입력과 일치하는 가장 긴 문자열 w를 찾는다.
3. w에 해당하는 사전의 색인 번호를 출력하고, 입력에서 w를 제거한다.
4. 입력에서 처리되지 않은 다음 글자가 남아있다면(c), w+c에 해당하는 단어를 사전에 등록한다.
5. 단계 2로 돌아간다.
"""
answer = []
indexes = {chr(i+64):i for i in range(1, 27)}
c = 27
while True:
i = 0
if msg in indexes:
answer.append(indexes[msg])
return answer
else:
for j in range(1, len(msg)+1):
if msg[i:j] not in indexes:
# print(msg[i:j], indexes[msg[i:j-1]])
answer.append(indexes[msg[i:j-1]])
indexes[msg[i:j]] = c
c += 1
msg = msg[j-1:]
break
'Coding Test > 프로그래머스' 카테고리의 다른 글
[프로그래머스] / [Level 2] / [Python] 예상 대진표 (0) | 2023.03.20 |
---|---|
[프로그래머스] / [Level 2] / [Python] k진수에서 소수 개수 구하기 (0) | 2023.03.20 |
[프로그래머스] / [Level 2] / [Python] 주차 요금 계산 (0) | 2023.03.20 |
[프로그래머스] / [Level 2] / [Python] 리코쳇 로봇 (0) | 2023.03.19 |
[프로그래머스] / [Level 1] / [Python] 삼총사 (0) | 2023.03.10 |