[2018 카카오 블라인드] 압축 파이썬 풀이

sewonK·2022년 1월 31일
1
post-custom-banner

문제 링크

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

문제 설명

cur, next 인덱스 포인터를 두어, 사전에서 현재 입력과 일치하는 가장 긴 문자열(w)을 찾은 뒤 색인 번호를 출력하였다.
다음 글자(c)가 남아있는 경우 (w+c)를 사전에 등록하였다.

문제 코드

def solution(msg):
    answer = []
    dict = {}
    for i in range(26):
        dict[chr(65 + i)] = i + 1
        
    cur, next = 0, 0 #현재 글자 idx, next글자 idx
    while True:
        next += 1
        # 다음 글자가 남아있지 않다면
        if next == len(msg):
            # w 출력하고 while문 탈출
            answer.append(dict[msg[cur:next]])
            break
        # 다음 글자가 남아있고(c), 사전에 등록되어 있지 않다면
        if msg[cur:next+1] not in dict:
            # w+c 사전에 등록
            dict[msg[cur:next+1]] = len(dict)+1
            # w 출력
            answer.append(dict[msg[cur:next]])
            cur = next
        
    return answer
정확성  테스트
테스트 1 〉	통과 (0.01ms, 10.2MB)
테스트 2 〉	통과 (0.02ms, 10.3MB)
테스트 3 〉	통과 (0.01ms, 10.3MB)
테스트 4 〉	통과 (0.18ms, 10.3MB)
테스트 5 〉	통과 (0.02ms, 10.2MB)
테스트 6 〉	통과 (0.53ms, 10.3MB)
테스트 7 〉	통과 (0.26ms, 10.4MB)
테스트 8 〉	통과 (0.28ms, 10.3MB)
테스트 9 〉	통과 (0.01ms, 10.2MB)
테스트 10 〉	통과 (0.27ms, 10.3MB)
테스트 11 〉	통과 (0.18ms, 10.3MB)
테스트 12 〉	통과 (0.30ms, 10.3MB)
테스트 13 〉	통과 (0.40ms, 10.3MB)
테스트 14 〉	통과 (0.59ms, 10.3MB)
테스트 15 〉	통과 (0.40ms, 10.3MB)
테스트 16 〉	통과 (0.32ms, 10.2MB)
테스트 17 〉	통과 (0.26ms, 10.2MB)
테스트 18 〉	통과 (0.10ms, 10.3MB)
테스트 19 〉	통과 (0.12ms, 10.3MB)
post-custom-banner

0개의 댓글