📖 2018 KAKA BLIND RECRUITMENT > [3차] 압축

📖What I thought

처음에는 lzw압축 자체를 이해를 못해서 ..ㅠㅠ 너무 어려웠는데 결국 lzw 압축 이해하고 그대로 구현만 하면 되는 문제!

📖풀이

📎구현

def solution(msg):
    answer = []
    
    lzw = {chr(a): i+1 for i, a in enumerate(range(65, 91))}
    
    w, c = 0, 1
    # msg[w:c]는 항상 사전에 존재
    while True:
        if c >= len(msg):
            answer.append(lzw[msg[w:c]])
            break
        
        nxt = msg[w:c+1]
        
        # 후보가 사전에 있음
        if nxt in lzw:
            c+=1 # 사전에 존재하는 가장 긴 문자열 찾아야하므로 더 뒤로 가!
        # 후보가 사전에 없음
        else:
            answer.append(lzw[msg[w:c]])
            
            lzw[msg[w:c+1]] = len(lzw) + 1
            
            w = c
            c = w + 1
    
    return answer

📖What I learned

  • 오랜만에 아스키 코드! chr(65)==‘A' 기억하자 A-Z = 65-90

📖관련 지식