[프로그래머스] [3차] 압축(2018 KAKAO BLIND RECRUITMENT) - Lv2

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

     

    프로그래머스

    코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

    programmers.co.kr

    구현에 쓸대없이 시간이 많이 걸린 문제 ㅠ 좀 더 열심히해보자... 아자아자

     

    풀이

    def solution(msg):
        answer = []
        msg_dict = {}
        dict_num = 27
    
        for i in range(26):
            msg_dict[chr(i + 65)] = i + 1
    
        i = 0
        check = ''
        while True:
            check += msg[i]
            if check not in msg_dict:
                answer.append(msg_dict[check[:-1]])
                msg_dict[check] = dict_num
                dict_num += 1
    
                msg = msg.replace(check[:-1], '', 1)
                check = ''
                i = 0
            else:
                if len(check) == len(msg):
                    answer.append(msg_dict[check])
                    break
                i += 1
    
        return answer

     

     

    해설

    먼저 문제에 따라 알파벳 한개당 사전을 만든 다음, 받은 문자열을 한문자씩 추가하여 검사해준다. 한문자씩 추가 하며 사전에 있는지 검사하며 사전에 있으면 다음 문자를 추가하여 검사, 사전에 없다면 사전에 추가해주고 추가하기 전 것을 answer에 담아준다. 다음은 이해를 돕기 위해 찍은 로그이다.

     

    남은것: KAKAO
    검사합니다 -> K
    남은것: KAKAO
    검사합니다 -> KA
    삭제: K
    answer: [11]

    남은것: AKAO
    검사합니다 -> A
    남은것: AKAO
    검사합니다 -> AK
    삭제: A
    answer: [11, 1]

    남은것: KAO
    검사합니다 -> K
    남은것: KAO
    검사합니다 -> KA
    남은것: KAO
    검사합니다 -> KAO
    삭제: KA
    answer: [11, 1, 27]

    남은것: O
    검사합니다 -> O
    검사할것과 남은것의 문자열 길이가 같으니 break
    [11, 1, 27, 15]

    댓글