https://programmers.co.kr/learn/courses/30/lessons/17684
코딩테스트 연습 - [3차] 압축
TOBEORNOTTOBEORTOBEORNOT [20, 15, 2, 5, 15, 18, 14, 15, 20, 27, 29, 31, 36, 30, 32, 34]
programmers.co.kr
* 풀이 못 함
def solution(msg):
ans, index = [], {chr(i) : i - 64 for i in range(65, 91)}
last_idx = 26
# i: 입력 시작 지점, size: w의 길이
i, size = 0, 0
while True:
size += 1
# w: size만큼의 부분, w + c: size + 1만큼의 부분
if not msg[i:i + size + 1] in index:
ans.append(index[msg[i:i + size]])
last_idx += 1
index[msg[i:i + size + 1]] = last_idx
i += size
size = 0
# 맨 끝 상황 처리 (입력에서 처리되지 않는 다음 글자가 없는 상황)
else:
if i + size == len(msg):
ans.append(index[msg[i:i + size]])
break
return ans
- 아이디어: 각 시작 지점에서 사전에 있는 최대 지점을 알 수 있게 길이(size)를 늘려나가 w는 정답 리스트에 색인번호 입력, w + c는 사전에 등록
- 맨 끝에 처리되지 않을 다음 글자가 없는 상황에 유의해야 함
- 비슷한 접근으로 포인터 두 개를 설정하고 각자 늘려가는 방식으로 시도했었는데, size로 접근한 것이 더 직관적이어서 풀이하기 편한 것 같음
'CS > algorithm & data structure' 카테고리의 다른 글
[프로그래머스] [3차] n진수 게임 (파이썬 풀이) (0) | 2022.07.06 |
---|---|
[프로그래머스] [3차] 파일명 정렬 (파이썬 풀이) (0) | 2022.07.05 |
[프로그래머스] [3차] 방금그곡 (파이썬 풀이) (0) | 2022.06.30 |
[프로그래머스] [1차] 캐시 (파이썬 풀이) (0) | 2022.06.30 |
[프로그래머스] [1차] 프렌즈4블록 (파이썬 풀이) (0) | 2022.06.30 |