[Python] 프로그래머스 - 압축

728x90
반응형

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

# 전에 포스팅한 '방금그곡'과 같이 2018 카카오 블라인드 코딩테스트에 출제된 문제이다.

   생각한 아이디어대로 짜봤는데 바로 통과되어서 놀랐다.

 

# 4번째 줄처럼 dic을 선언하는 방식을 알게 되었고, 다른 사람들의 풀이를 보니

   zip함수를 사용해 아래와 같이 선언하는 방법도 있다는 것도 알게 되었다.

   " dic= dict(zip("ABCDEFGHIJKLMNOPQRSTUVWXYZ", range(1, 27))) "

   

def solution(msg):
    answer = []
    # 알파벳 단어에 해당하는 색인번호 dic생성
    dic = {chr(i + 64): i for i in range(1, 27)}
    cnt = 27
    i = 0
    search = ''
    
    # i가 msg길이에 해당하는 값까지 증가되면 break
    while i < len(msg):
        # search에 한글자씩(msg[i]) 더한다.
        search += msg[i]
        # 한 글자씩 더하면서 찾으려는 단어가 이미 dic에 있다면 i인덱스 1증가, continue
        if search in dic:
            i += 1
            continue
        # 단어가 dic에 없으면 dic에 단어 추가 (색인번호는 27부터 1씩 증가해야하므로 cnt 1증가)
        else:
            dic[search] = cnt
            cnt += 1
            # 마지막 글자를 제외한 단어는 사전에 있으므로 그 단어에 해당하는 색인번호 answer에 append
            s = search[:-1]
            answer.append(dic[s])
            # search = ''로 초기화
            search = ''
    
    # search에 마지막 글자 남아있으니 마지막 글자의 색인번호 answer에 append
    answer.append(dic[search])
    return answer

(프로그래머스 level: 2)

728x90
반응형
TAGS.

Comments