코딩테스트/기출
[2018 KAKAO BLIND RECRUITMENT/ 프로그래머스] 17684번 : [3차] 압축
ydin
2022. 9. 21. 19:34
- 문제 : https://school.programmers.co.kr/learn/courses/30/lessons/17684
Lv2 문제이고, 스스로 푼 문제다!
문제 이해
alphabet을 사전처럼 이용하는데 이 사전에 해당 문자가 있을 때까지 진행해야한다고 생각했다.
answer에는 사전에 존재하는 문자열의 인덱스 번호를 누적한다
now는 시작 문자 또는 문자열을 가리킨다
1. 사전에 없는 문자가 나오면 그 전 문자의 사전번호를 answer에 추가하고, 사전에 그 새로운 문자를 추가한 뒤
2. 마지막 문자를 기준으로 다시 시작한다. (now = nx)
3. 위의 과정으로 진행하면 사전에서 가장 마지막 문자열은 카운트되지 못하고 끝나기 때문에 now 문자의 인덱스를 alphabet에서 가져와 answer에 추가해준다
- 정답 풀이 :
def solution(msg):
alphabet = [0, 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z']
#사전에 있는 문자까지 진행하고, 그 단어의 인덱스 answer에 추가, 없는 문자열에서 멈추고 사전에 등록
answer = []
msg = list(msg)
now = msg.pop(0)
while msg:
nx = msg.pop(0)
current = now + nx
if current not in alphabet:
alphabet.append(current)
answer.append(alphabet.index(now))
now = nx
else: # current in alphabet
now = current
#마지막 남은 문자는 반복문에서 연산되지 않으므로 따로 해당 문자의 인덱스를 answer에 추가해준다
if now != 0:
answer.append(alphabet.index(now))
return answer