본문 바로가기
문제 풀이/프로그래머스 (Programmers)

[Python] 프로그래머스 : [3차] 압축

by 희조당 2022. 10. 6.
728x90

https://school.programmers.co.kr/learn/courses/30/lessons/17684

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr


💡 문제 풀이

일반적인 구현 문제이다.

 

문제를 두 파트로 나누어 풀었다.

dict에 있으면 정답에 append 하는 파트, dict에 없으면 dict에 append 하는 파트'

 

정답에 append 하는 파트에서는 현재 dict에 있는 최대 길이부터 문자열을 확인하고

해당 문자열이 있으면 정답 리스트에 담아준다.

 

dict에 append 하는 파트에서는 리스트에 담아준 문자열을 가져와서 다음 문자열을 하나하나 추가하면서 비교한다.

dict에 없다면 담아주고 임시 문자열을 초기화해준다.

✔️ 느낀 점

의사 코드 그대로 따라가서 코드를 짜고 바로 통과했는데  돌이켜보니까 코드가 엄청나게 지저분하다..

💻 코드

def solution(msg):
    ans = []
    
    dict = {}
    for idx, ch in enumerate("ABCDEFGHIJKLMNOPQRSTUVWXYZ", start=1):
        dict[ch] = idx
    
    tmp = ''
    maxLen = 1
    i = 0
    while i < len(msg):
        for j in range(i+maxLen, i-1, -1):
            tmp = msg[i:j]
            if tmp in dict:
                i = j
                ans.append(dict[tmp])
                break
            
        for k in range(j, len(msg)):
            tmp += msg[k]
            if tmp not in dict:
                maxLen = max(maxLen, len(tmp))
                idx += 1
                dict[tmp] = idx
                tmp = ''
                break
    return ans

댓글