Python/CoTe
[프로그래머스] 3차 압축
joannekim0420
2023. 12. 12. 02:39
728x90
https://school.programmers.co.kr/learn/courses/30/lessons/17684#
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
TIP
0. {'A':1, 'B':2 ...} dictionary 만들기
1. 프로그래머스의 설명대로 w는 현재 글자, c는 다음 글자로 놓고
2. w가 dictionary에 있는지 확인
3. w+c 가 dictionary에 있는지 확인을 반복적으로 해야한다. (→ 나는 이것을 while 문과 함수로 이용)
4. 없다면 w+c 를 dictionary에 추가
5. 만약 w+c가 dictionary 에 있다면 다음 글자와 이어서 확인해야하므로 w+c가 새로운 w 가 된다.
활용한 주요 문법 및 모듈
1. dictionary
2. while 문
3. while문 내에서 반복적으로 조건 확인용 함수
4. deque 의 popleft()
내 코드
from collections import deque
dict_ = {v:k+1 for k,v in enumerate("ABCDEFGHIJKLMNOPQRSTUVWXYZ")}
#dictionary 에 있는지 확인하는 함수
def check_dict(w, c, dict_num, answer):
w_c = w+c
if w_c not in dict_:
if w in dict_: #w는 있지만, w_c 는 없는 경우 우선 answer에 w 추가
answer.append(dict_[w])
#dictionary 업데이트
dict_[w_c] = dict_num
dict_num += 1
return c, dict_num, answer
#만약 w_c 가 이미 dictionary 에 있다면 다음 글자까지 붙여서 확인해야하므로 w_c를 return
else:
return w_c, dict_num, answer
def solution(msg):
answer = []
queue = deque(msg)
dict_num = 27
w = queue.popleft()
#테스트 케이스 9 번 실패 이유
if not queue:
answer.append(dict_[w])
while queue:
c = queue.popleft()
w, dict_num, answer = check_dict(w,c, dict_num, answer)
#마지막 글자까지 확인하고 queue가 비었다면 마지막 글자에 해당하는 값 answer append
if not queue:
answer.append(dict_[w])
return answer