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