# 2018 KAKAO BLIND RECRUITMENT - 압축

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

* aps

  w 와 c 를 msg 를 슬라이싱해서 구현.

  1. 상황마다 msg 를 슬라이싱하는 시작점 s 와 얼마만큼 슬라이싱할 간격 L 을 사용

  \`\`\` dic = {'A' : 1 ,,,} a(\[]): 결과로 출력할 list, wc 를 그 때마다 append가

  s(0): msg 에서 w 로 입력받을 슬라이싱 인덱스 시작점. l(1): msg 에서 s부터 얼마만큼 더가서 슬라이싱할 것인지. w = msg\[s : s + l] c = msg\[s + l : s + l + 1]

  s = 0 l = 1

  while True:

  ```
  w = msg[s : s + l]
  c = msg[s + l : s + l + 1]

  wc 가 사전에 있으면
      l += 1
      # 존재하는 wc 가 끝까지라면, wc 사전번호 a에 추가하고, a 반환하고 종료

  wc 가 사전에 없으면
      w 사전번호 a 에 추가 (출력용)
      wc 사전에 추가
      s += l
      l = 1

      # s == len(msg) - 1 이면
          msg[s:s+l] 의 사전번호 a 에 추가하고, a 반환하고 종료.
  ```

````
```python
def solution(msg):
    dic = dict()
    lst = [chr(i) for i in range(ord('A'), ord('Z') + 1)]

    for idx, char in enumerate(lst):
        dic[char] = idx + 1

    a = []
    s = 0
    l = 1

    while True:
        w = msg[s : s + l]
        c = msg[s + l:s + l + 1]

        if (w + c) in dic:
            l += 1
            if (s + l) >= len(msg):
                a.append(dic[w + c])
                return a

        else:
            a.append(dic[w])
            dic[w + c] = len(dic) + 1
            s += l
            l = 1

            if s == len(msg) - 1:
                a.append(dic[msg[s: s + l]])
                return a
````
