티스토리 뷰

문제주소

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

내 풀이

def solution(msg):
    answer = []
    alpha = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
    dictionary = {}
    dictIndex = 1;
    # 사전 설정하기
    for char in alpha:
        dictionary[char] = dictIndex
        dictIndex +=1
    while True:
        if len(msg) == 0:
            return answer
        # 문자열을 사전에서 찾고 설정할 단위 설정
        minChar = ""
        newChar = ""
        for index in range(1,len(msg)+1):
            if msg[:index] in dictionary:
                minChar = msg[:index]
            else:
                newChar = msg[:index]
                break
        # 찾은 문자를 문자열에서 제거해 나가는 방식
        answer.append(dictionary[minChar])
        dictionary[newChar] = dictIndex
        dictIndex +=1
        msg = msg[len(minChar):]    
    return answer

다른 사람 풀이

딕셔너리를 저장하는 방식을 간단하게 할 수 있는 방법이 많았다.

tmp = {chr(e + 64): e for e in range(1, 27)}
myDic = dict( zip("ABCDEFGHIJKLMNOPQRSTUVWXYZ", range(1,27)) )

보통 문자열을 나처럼 단어로 끊지 않고 index 값으로 끊어서 작성하는 경우가 많았다. 계속 동일한 index 정보를 활용할 수 있는 장점이 있는 것 같았다.

사전에 넣을 값을 dictIndex로 두고 증가하는 방식으로 사용했는데 len(dictionary)+1의 방식으로 값을 저장하는 경우가 많았다. 

while문을 사용할 때도 if 문으로 종료조건을 선언하는 것보다 while len(msg) >0 : 이런식으로 while문 자체에 선언해 주는 방법을 생각하는 것이 좋을 듯 싶다.

정리

문자열을 [:]의 방식으로 잘라서 사용하는 것과 문제에도 직접적으로 언급된 사전형을 사용하는 것이 이 문제의 핵심이었다.

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
글 보관함