Published:
Updated:

  • Reference
  • 너무 어려웠다.. 카카오 코테에서 90퍼대의 정답률이었다고 하는데 슬프다


Solution

def solution(msg):
    # (출력 -> 사전 등록) 이 순서를 잘 기억하자
    # "사전 색인 번호"를 배열로 출력하자
    answer = []

    my_dict = {chr(ord('A') + i): i + 1 for i in range(26)}

    # 압축 알고리즘은 대문자만 처리
    msg = msg.upper()

    index = 0
    while index < len(msg):
        tmp_word = ''
        is_in = False

        for index in range(index, len(msg)):
            tmp_word += msg[index]

            if tmp_word not in my_dict:
                is_in = True
                break

        if is_in:
            my_dict[tmp_word] = len(my_dict) + 1
            answer.append(my_dict[tmp_word[:-1]])
        else:
            answer.append(my_dict[tmp_word])
            break

    # # 이제 계속 색인 번호를 answer에 저장해주면서 my_dict에 사전 추가해주자
    # # my_dict에 추가해 줄 때 이미 26인 my_dict_index를 가지고 하나씩 추가해주면서 key에 넣어주자!
    # tmp_word = ''
    # for word in msg:
    #     tmp_word += word
    #
    #     # 만약 tmp_word가 사전에 없다면 무조건 tmp_word가 2글자임
    #     # 그 tmp_word를 사전에 value로 추가해주면 됨
    #     # 근데 dict에서 'in'의 기준이 key일까 value일까?
    #     # 여기서 원하는 건 단어인 key를 기준으로 뽑아내는 거 -> 상황에 따라 key와 value 자리 바꿔도 됨
    #     if tmp_word not in my_dict:
    #         my_dict_index += 1
    #         my_dict[tmp_word] = my_dict_index
    #
    #         # 초기화 해주기 전에 전 index의 word 출력
    #         answer.append(my_dict[tmp_word[0]])
    #
    #         # tmp_word를 완전 초기화해주는 게 아니라 다음 배열을 위해 현재 word를 저장해줘야지
    #         tmp_word = word
    #
    #     # 만약 사전에 이미 존재하는 경우 3,4,5..글자 가능
    #     else:  # tmp_word in my_dict:
    #         my_dict_index += 1
    #         my_dict[tmp_word] = my_dict_index
    #
    #         # 초기화 해주기 전에 전 index의 word 출력
    #         tmp_len = len(tmp_word)
    #         answer.append(my_dict[tmp_word[:tmp_len]])
    #
    #         # 얘도 똑같이 현재 word 저장
    #         tmp_word = word

    return answer

Leave a comment