728x90
https://school.programmers.co.kr/learn/courses/30/lessons/17684
규칙에 대해 이해를 해야 풀 수 있는 문제이다
사전은 한글자 (알파벳) 로 모두 초기화 시킨다.
word_dict = {chr(i): (i - 64) for i in range(65, 91)}
현재 입력 인덱스가 w, 다음 글자 인덱스가 c라고 하면, KAKAO 예시를 봤을 때
word = KAKAO
index = 0 1 2 3 4
현재 입력 | 다음 글자 | w | c | 등록 여부 | answer = [] |
K | A | 0 | 1 | KA는 사전에 없음 'KA':27 등록 |
[11] |
A | K | 1 | 2 | AK는 사전에 없음 'AK':28 등록 |
[11, 1] |
K | A | 2 | 3 | KA는 있으므로 c += 1 |
[11, 1] |
KA | O | 2 | 4 | KAO 는 사전에 없음 'KAO' : 29 등록, KA는 있으므로 27 출력 |
[11, 1, 27] |
O | 4 | 5 | 마지막 인덱스 | [11, 1, 27, 15] |
사전에서 확인하는 글자는 '현재 입력 + 다음글자' 즉, msg[w:c+1] 를 확인하게 된다. 그리고 없으면 사전에 등록해주어야 한다.
if msg[w:c + 1] not in word_dict: # 없는 경우
word_dict[msg[w:c + 1]] = len(word_dict) + 1
answer.append(word_dict[msg[w:c]])
w = c
마지막 인덱스가 등장하면 break 문으로 while문을 종료시킨다.
if c == n: # 마지막 인덱스
answer.append(word_dict[msg[w:c]])
break
마지막까지 확인되었던 w부터 c까지는 사전에 있었다는 의미이므로 msg[w:c]를 출력한다.
전체 풀이
def solution(msg):
answer = []
word_dict = {chr(i): (i - 64) for i in range(65, 91)}
n = len(msg)
w, c = 0, 0 # 현재 입력, 다음 글자
while True:
c += 1 # 다음 입력
if c == n: # 마지막 인덱스
answer.append(word_dict[msg[w:c]])
break
if msg[w:c + 1] not in word_dict: # 없는 경우
word_dict[msg[w:c + 1]] = len(word_dict) + 1
answer.append(word_dict[msg[w:c]])
w = c
return answer
728x90
'Algorithm (PS)' 카테고리의 다른 글
[백준] 14714번: 홍삼게임 (Easy) - Python (0) | 2023.08.08 |
---|---|
[백준] 28305번: 세미나 배정 (Python/파이썬) (0) | 2023.07.23 |
[백준] 17142번 - 연구소 3 (Python/파이썬) (0) | 2023.06.28 |
[프로그래머스] 아이템 줍기 (BFS) - Python (0) | 2023.06.20 |
[백준] 6593번: 상범 빌딩 (Python/파이썬) (0) | 2023.06.18 |