๋ฌธ์ ์ค๋ช
์ ์ ์ฌ์ ์ดํผ์น๋ ์นด์นด์คํก์ผ๋ก ์ ์ก๋๋ ๋ฉ์์ง๋ฅผ ์์ถํ์ฌ ์ ์ก ํจ์จ์ ๋์ด๋ ์ ๋ฌด๋ฅผ ๋งก๊ฒ ๋์๋ค. ๋ฉ์์ง๋ฅผ ์์ถํ๋๋ผ๋ ์ ๋ฌ๋๋ ์ ๋ณด๊ฐ ๋ฐ๋์ด์๋ ์ ๋๋ฏ๋ก, ์์ถ ์ ์ ์ ๋ณด๋ฅผ ์๋ฒฝํ๊ฒ ๋ณต์ ๊ฐ๋ฅํ ๋ฌด์์ค ์์ถ ์๊ณ ๋ฆฌ์ฆ์ ๊ตฌํํ๊ธฐ๋ก ํ๋ค.
์ดํผ์น๋ ์ฌ๋ฌ ์์ถ ์๊ณ ๋ฆฌ์ฆ ์ค์์ ์ฑ๋ฅ์ด ์ข๊ณ ๊ตฌํ์ด ๊ฐ๋จํ LZW(Lempel–Ziv–Welch) ์์ถ์ ๊ตฌํํ๊ธฐ๋ก ํ๋ค. LZW ์์ถ์ 1983๋ ๋ฐํ๋ ์๊ณ ๋ฆฌ์ฆ์ผ๋ก, ์ด๋ฏธ์ง ํ์ผ ํฌ๋งท์ธ GIF ๋ฑ ๋ค์ํ ์์ฉ์์ ์ฌ์ฉ๋์๋ค.
LZW ์์ถ์ ๋ค์ ๊ณผ์ ์ ๊ฑฐ์น๋ค.
- ๊ธธ์ด๊ฐ 1์ธ ๋ชจ๋ ๋จ์ด๋ฅผ ํฌํจํ๋๋ก ์ฌ์ ์ ์ด๊ธฐํํ๋ค.
- ์ฌ์ ์์ ํ์ฌ ์ ๋ ฅ๊ณผ ์ผ์นํ๋ ๊ฐ์ฅ ๊ธด ๋ฌธ์์ด w๋ฅผ ์ฐพ๋๋ค.
- w์ ํด๋นํ๋ ์ฌ์ ์ ์์ธ ๋ฒํธ๋ฅผ ์ถ๋ ฅํ๊ณ , ์ ๋ ฅ์์ w๋ฅผ ์ ๊ฑฐํ๋ค.
- ์ ๋ ฅ์์ ์ฒ๋ฆฌ๋์ง ์์ ๋ค์ ๊ธ์๊ฐ ๋จ์์๋ค๋ฉด(c), w+c์ ํด๋นํ๋ ๋จ์ด๋ฅผ ์ฌ์ ์ ๋ฑ๋กํ๋ค.
- ๋จ๊ณ 2๋ก ๋์๊ฐ๋ค.
์์ถ ์๊ณ ๋ฆฌ์ฆ์ด ์๋ฌธ ๋๋ฌธ์๋ง ์ฒ๋ฆฌํ๋ค๊ณ ํ ๋, ์ฌ์ ์ ๋ค์๊ณผ ๊ฐ์ด ์ด๊ธฐํ๋๋ค. ์ฌ์ ์ ์์ธ ๋ฒํธ๋ ์ ์๊ฐ์ผ๋ก ์ฃผ์ด์ง๋ฉฐ, 1๋ถํฐ ์์ํ๋ค๊ณ ํ์.
์๋ฅผ ๋ค์ด ์ ๋ ฅ์ผ๋ก KAKAO๊ฐ ๋ค์ด์จ๋ค๊ณ ํ์.
- ํ์ฌ ์ฌ์ ์๋ KAKAO์ ์ฒซ ๊ธ์ K๋ ๋ฑ๋ก๋์ด ์์ผ๋, ๋ ๋ฒ์งธ ๊ธ์๊น์ง์ธ KA๋ ์์ผ๋ฏ๋ก, ์ฒซ ๊ธ์ K์ ํด๋นํ๋ ์์ธ ๋ฒํธ 11์ ์ถ๋ ฅํ๊ณ , ๋ค์ ๊ธ์์ธ A๋ฅผ ํฌํจํ KA๋ฅผ ์ฌ์ ์ 27 ๋ฒ์งธ๋ก ๋ฑ๋กํ๋ค.
- ๋ ๋ฒ์งธ ๊ธ์ A๋ ์ฌ์ ์ ์์ผ๋, ์ธ ๋ฒ์งธ ๊ธ์๊น์ง์ธ AK๋ ์ฌ์ ์ ์์ผ๋ฏ๋ก, A์ ์์ธ ๋ฒํธ 1์ ์ถ๋ ฅํ๊ณ , AK๋ฅผ ์ฌ์ ์ 28 ๋ฒ์งธ๋ก ๋ฑ๋กํ๋ค.
- ์ธ ๋ฒ์งธ ๊ธ์์์ ์์ํ๋ KA๊ฐ ์ฌ์ ์ ์์ผ๋ฏ๋ก, KA์ ํด๋นํ๋ ์์ธ ๋ฒํธ 27์ ์ถ๋ ฅํ๊ณ , ๋ค์ ๊ธ์ O๋ฅผ ํฌํจํ KAO๋ฅผ 29 ๋ฒ์งธ๋ก ๋ฑ๋กํ๋ค.
- ๋ง์ง๋ง์ผ๋ก ์ฒ๋ฆฌ๋์ง ์์ ๊ธ์ O์ ํด๋นํ๋ ์์ธ ๋ฒํธ 15๋ฅผ ์ถ๋ ฅํ๋ค.
์ด ๊ณผ์ ์ ๊ฑฐ์ณ ๋ค์ฏ ๊ธ์์ ๋ฌธ์ฅ KAKAO๊ฐ 4๊ฐ์ ์์ธ ๋ฒํธ [11, 1, 27, 15]๋ก ์์ถ๋๋ค.
์ ๋ ฅ์ผ๋ก TOBEORNOTTOBEORTOBEORNOT๊ฐ ๋ค์ด์ค๋ฉด ๋ค์๊ณผ ๊ฐ์ด ์์ถ์ด ์งํ๋๋ค.
์ ๋ ฅ ํ์
์ ๋ ฅ์ผ๋ก ์๋ฌธ ๋๋ฌธ์๋ก๋ง ์ด๋ค์ง ๋ฌธ์์ด msg๊ฐ ์ฃผ์ด์ง๋ค. msg์ ๊ธธ์ด๋ 1 ๊ธ์ ์ด์, 1000 ๊ธ์ ์ดํ์ด๋ค.
์ถ๋ ฅ ํ์
์ฃผ์ด์ง ๋ฌธ์์ด์ ์์ถํ ํ์ ์ฌ์ ์์ธ ๋ฒํธ๋ฅผ ๋ฐฐ์ด๋ก ์ถ๋ ฅํ๋ผ.
์ ์ถ๋ ฅ ์์
ํ์ด ์ฝ๋
from collections import deque
def solution(msg):
answer = []
hash_table = {}
for i in range(65, 91):
hash_table[chr(i)] = i-64
queue = deque(msg)
while queue:
temp = queue.popleft()
while queue and temp + queue[0] in hash_table:
temp += queue.popleft()
answer.append(hash_table[temp])
if queue:
hash_table[temp+queue[0]] = len(hash_table) + 1
return answer
ํ์ ํด์๋ฅผ ์ฌ์ฉํด ํ์๋ค.
ํด์ ํ ์ด๋ธ์ A๋ถํฐ Z๊น์ง ์ฌ์ ์ ๊ตฌ์ฑํ๋ค.
๊ทธ ํ, msg๋ฅผ ํ์ ๋ฃ๋๋ค.
์์์๋ถํฐ ํด์์ ์กด์ฌํ๋ ๋ฒ์๊น์ง queue.popleft๋ฅผ ์งํํ๊ณ , ํด๋น ๊ฐ์ answer์ ๋ฃ๋๋ค.
๊ธฐ์กด ๋ฒ์ + ๋ฐ๋ก ๋ค ๊ธ์๋ฅผ ํด์ฌ ํ ์ด๋ธ์ ์๋ก์ด ์ ์ฅํ๋ ๊ฒ์ ๋ฐ๋ณตํ๋ค.
'๐ ์ฝ๋ฉํ ์คํธ ๋๋น : PS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ํ๋ก๊ทธ๋๋จธ์ค] ์ฃผ์๊ฐ๊ฒฉ (level2, python) (1) | 2022.09.13 |
---|---|
[ํ๋ก๊ทธ๋๋จธ์ค] ๋ ๋งต๊ฒ (level2, python) (0) | 2022.09.12 |
[ํ๋ก๊ทธ๋๋จธ์ค] ํ๊ฒ ๋๋ฒ (level2, python) (0) | 2022.09.12 |
[ํ๋ก๊ทธ๋๋จธ์ค] ๋คํธ์ํฌ (level3, python) (0) | 2022.09.12 |
[ํ๋ก๊ทธ๋๋จธ์ค] ์ ํ๋ฒํธ ๋ชฉ๋ก (level2, python) (0) | 2022.09.12 |