📖 문제
https://programmers.co.kr/learn/courses/30/lessons/17684
💻 코드
def zipping(msg, d, answer):
# 가장 긴 문자열을 구하므로 인덱싱은 뒤에서부터
for i in range(len(msg), 0, -1):
# 2단계부터 4단계 요구사항 구현
if d.get(msg[:i]):
answer.append(d[msg[:i]])
if len(msg[i:]) != 0:
d[msg[:i + 1]] = len(d) + 1
return msg[i:]
def solution(msg):
answer = []
d = dict()
# A부터 Z까지 입력
for a in range(65, 91):
d[chr(a)] = a - 64
# 메시지가 남아있다면 압축
while len(msg) != 0:
msg = zipping(msg, d, answer)
return answer
🙌 한마디
구현 문제고 특별한 알고리즘이 사용되지 않는 문제였다. 문자열 파싱 문제인데 요구사항이 구현하기 좀 헷갈린다는 점이 특징이다. 예전에 이 문제를 푼적이 있어 이번이 두번째 풀이인데, 처음에 풀 때 많이 애를 먹었던 기억이 난다. 그 때 당시 코드를 보니 가장 긴 문자열을 찾는데 문자열 인덱싱을 0부터 시작했었다. 그러다보니 로직이 꼬여서 애를 먹었었다. 뒤에서부터 인덱싱을 하면 처음 찾은 값이 바로 가장 긴 문자열이지만, 0부터 인덱싱을하면 값이 나온다 할지라도 그 값이 가장 긴 문자열인지 알 수가 없다. 그래서 뒤에서부터 인덱싱하는 것이 맞다. 이번에는 무난하게 풀려서 다행이다.
'Problem Solving > 📕Programmers' 카테고리의 다른 글
[Programmers] 로또의 최고 순위와 최저 순위 (Python) (0) | 2021.11.17 |
---|---|
[Programmers] 멀리 뛰기 (Python) (0) | 2021.10.20 |
[Programmers] 2주차_상호평가 (Python) (0) | 2021.10.14 |
[Programmers] 다트 게임 (Python) (0) | 2021.10.13 |
[Programmers] 징검다리 건너기 (Python) (0) | 2021.10.12 |