🤔 문제


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

 

코딩테스트 연습 - [3차] 압축

TOBEORNOTTOBEORTOBEORNOT [20, 15, 2, 5, 15, 18, 14, 15, 20, 27, 29, 31, 36, 30, 32, 34]

programmers.co.kr

😀 풀이


 위 문제는 아래 사진과 같은 조건을 따라 그대로 구현하면 되는 문제입니다. 1 ~ 5번 과정이 각각 풀이 코드의 라인 한 개씩과 매칭되어 따로 문제 풀이과정을 설명하지 않고 해당 과정을 구현한 부분에 주석을 남겨놨습니다.

[3차] 압축 문제의 일부

 추가로 findLongestWord라는 재귀함수를 만들었는데 테스트케이스에서 recursionlimit으로 인한 런타임 에러가 발생하여 1,2번 라인에 관련 코드를 추가해주었습니다.

 

💻 풀이 코드는 아래와 같습니다.

import sys
sys.setrecursionlimit(int(1e9))

# 길이가 1인 모든 단어를 포함하도록 사전을 초기화한다.
index = {chr(ord('A') + i) : i + 1 for i in range(26)}

def findLongestWord(w):
    if w in index:
        return w
    return findLongestWord(w[:-1])

def solution(msg):
    answer = []
    while msg:
        w = findLongestWord(msg) # 현재 입력과 일치하는 가장 긴문자열 w를 찾는다.
        answer.append(index[w]) # w에 해당하는 사전의 색인 번호를 출력하고,
        msg = msg[len(w):] # 입력에서 w를 제거한다.
        if msg: # 입력에서 처리되지 않은 다음 글자가 남아있다면(c), w+c에 해당하는 단어를 사전에 등록한다.
            index[w + msg[0]] = len(index) + 1
    return answer
반응형
복사했습니다!