2018 KAKAO BLIND RECRUITMENT - 압축 (Level 2)

 

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


Code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
def solution(msg):
    dic = {chr(k): k-ord('A')+1 for k in range(ord('A'), ord('Z')+1)}

    answer = []
    i = 0
    while True:
        if i == len(msg):
            break
        for l in range(1, len(msg)-i+1):
            ss = msg[i:i+l]
            if ss in dic:
                ss_known = ss
            else:
                dic[ss] = len(dic) + 1
                answer.append(dic[ss_known])
                i = i+l-1
                break
        else:
            answer.append(dic[ss_known])
            break
    return answer

Complexity

$O(|\text{msg}|^2)$