Algorithm/1일 1코테

[🥰프로그래머스] 압축 (2018 KAKAO BLIND RECRUITMENT)

대인보우 2022. 10. 8. 17:38
반응형

나의 풀이

def solution(msg):
	# 알파벳 사전을 만들기 위한 스트링
    alphabet_string = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
    
    # 알파벳 사전 만들기... enumerate는 0부터 시작해서 1씩 더해줌
    _dict = {}
    for i, a in enumerate(alphabet_string):
        _dict[a] = i+1
    
    answer = []
    
    l = 0
    r = l+1
    
    # msg[l:r]이 이미 사전에 있으면 하나 더 해줌 (K->KA)
    # 없으면 (KA) 사전에 넣어주고 이전 글자 (K)를 answer에 더해줌
    # 다만 이미 사전에 있어도 마지막인 경우 (KAKAO 중 O) answer에 더해주지 않아서 따로 처리해줌
    while r <= len(msg):
        if msg[l:r] in _dict:
            if r == len(msg):
                answer.append(_dict[msg[l:r]])
            r += 1
        else:
            _dict[msg[l:r]] = len(_dict) + 1
            answer.append(_dict[msg[l:r-1]])
            l = r-1
            r = l+1

    return answer

 

다른사람 풀이

def solution(msg):
    answer = []
    # chr를 활용하여 알파벳 사전 구축
    tmp = {chr(e + 64): e for e in range(1, 27)}
    
    num = 27 # map의 value
    while msg:
        tt = 1
        while msg[:tt] in tmp.keys() and tt <= msg.__len__(): # 현재 존재하는 key 찾기
            tt += 1
        tt -= 1
        if msg[:tt] in tmp.keys():
            answer.append(tmp[msg[:tt]])
            tmp[msg[:tt + 1]] = num # 새 키 만들기
            num += 1 # 다음 키를 위해 하나 더하기
        msg = msg[tt:] 
    return answer

 

반응형