์ฝ๋ฉ ํ ์คํธ ์ฐ์ต - 2018 KAKAO BLIND RECRUITMENT
<[3์ฐจ] ์์ถ>
๋ฌธ์ ์ค๋ช
์ ์ ์ฌ์ ์ดํผ์น๋ ์นด์นด์คํก์ผ๋ก ์ ์ก๋๋ ๋ฉ์์ง๋ฅผ ์์ถํ์ฌ ์ ์ก ํจ์จ์ ๋์ด๋ ์ ๋ฌด๋ฅผ ๋งก๊ฒ ๋์๋ค.
๋ฉ์์ง๋ฅผ ์์ถํ๋๋ผ๋ ์ ๋ฌ๋๋ ์ ๋ณด๊ฐ ๋ฐ๋์ด์๋ ์ ๋๋ฏ๋ก, ์์ถ ์ ์ ์ ๋ณด๋ฅผ ์๋ฒฝํ๊ฒ ๋ณต์ ๊ฐ๋ฅํ ๋ฌด์์ค
์์ถ ์๊ณ ๋ฆฌ์ฆ์ ๊ตฌํํ๊ธฐ๋ก ํ๋ค.
์ดํผ์น๋ ์ฌ๋ฌ ์์ถ ์๊ณ ๋ฆฌ์ฆ ์ค์์ ์ฑ๋ฅ์ด ์ข๊ณ ๊ตฌํ์ด ๊ฐ๋จํ LZW(Lempel–Ziv–Welch) ์์ถ์ ๊ตฌํํ๊ธฐ๋ก ํ๋ค. LZW ์์ถ์ 1983๋ ๋ฐํ๋ ์๊ณ ๋ฆฌ์ฆ์ผ๋ก, ์ด๋ฏธ์ง ํ์ผ ํฌ๋งท์ธ GIF ๋ฑ ๋ค์ํ ์์ฉ์์ ์ฌ์ฉ๋์๋ค.
LZW ์์ถ์ ๋ค์ ๊ณผ์ ์ ๊ฑฐ์น๋ค.
1. ๊ธธ์ด๊ฐ 1์ธ ๋ชจ๋ ๋จ์ด๋ฅผ ํฌํจํ๋๋ก ์ฌ์ ์ ์ด๊ธฐํํ๋ค.
2. ์ฌ์ ์์ ํ์ฌ ์ ๋ ฅ๊ณผ ์ผ์นํ๋ ๊ฐ์ฅ ๊ธด ๋ฌธ์์ด w๋ฅผ ์ฐพ๋๋ค.
3. w์ ํด๋นํ๋ ์ฌ์ ์ ์์ธ ๋ฒํธ๋ฅผ ์ถ๋ ฅํ๊ณ , ์ ๋ ฅ์์ w๋ฅผ ์ ๊ฑฐํ๋ค.
4. ์ ๋ ฅ์์ ์ฒ๋ฆฌ๋์ง ์์ ๋ค์ ๊ธ์๊ฐ ๋จ์์๋ค๋ฉด(c), w+c์ ํด๋นํ๋ ๋จ์ด๋ฅผ ์ฌ์ ์ ๋ฑ๋กํ๋ค.
5. ๋จ๊ณ 2๋ก ๋์๊ฐ๋ค.
์์ถ ์๊ณ ๋ฆฌ์ฆ์ด ์๋ฌธ ๋๋ฌธ์๋ง ์ฒ๋ฆฌํ๋ค๊ณ ํ ๋, ์ฌ์ ์ ๋ค์๊ณผ ๊ฐ์ด ์ด๊ธฐํ๋๋ค.
์ฌ์ ์ ์์ธ ๋ฒํธ๋ ์ ์ ๊ฐ์ผ๋ก ์ฃผ์ด์ง๋ฉฐ, 1๋ถํฐ ์์ํ๋ค๊ณ ํ์.
์๋ฅผ ๋ค์ด ์ ๋ ฅ์ผ๋ก KAKAO๊ฐ ๋ค์ด์จ๋ค๊ณ ํ์.
1. ํ์ฌ ์ฌ์ ์๋ KAKAO์ ์ฒซ ๊ธ์ K๋ ๋ฑ๋ก๋์ด ์์ผ๋, ๋ ๋ฒ์งธ ๊ธ์๊น์ง์ธ KA๋ ์์ผ๋ฏ๋ก,
์ฒซ ๊ธ์ K์ ํด๋นํ๋ ์์ธ ๋ฒํธ 11์ ์ถ๋ ฅํ๊ณ , ๋ค์ ๊ธ์์ธ A๋ฅผ ํฌํจํ KA๋ฅผ ์ฌ์ ์ 27 ๋ฒ์งธ๋ก ๋ฑ๋กํ๋ค.
2. ๋ ๋ฒ์งธ ๊ธ์ A๋ ์ฌ์ ์ ์์ผ๋, ์ธ ๋ฒ์งธ ๊ธ์๊น์ง์ธ AK๋ ์ฌ์ ์ ์์ผ๋ฏ๋ก, A์ ์์ธ ๋ฒํธ 1์ ์ถ๋ ฅํ๊ณ ,
AK๋ฅผ ์ฌ์ ์ 28 ๋ฒ์งธ๋ก ๋ฑ๋กํ๋ค.
3. ์ธ ๋ฒ์งธ ๊ธ์์์ ์์ํ๋ KA๊ฐ ์ฌ์ ์ ์์ผ๋ฏ๋ก, KA์ ํด๋นํ๋ ์์ธ ๋ฒํธ 27์ ์ถ๋ ฅํ๊ณ ,
๋ค์ ๊ธ์ O๋ฅผ ํฌํจํ KAO๋ฅผ 29 ๋ฒ์งธ๋ก ๋ฑ๋กํ๋ค.
4. ๋ง์ง๋ง์ผ๋ก ์ฒ๋ฆฌ๋์ง ์์ ๊ธ์ O์ ํด๋นํ๋ ์์ธ ๋ฒํธ 15๋ฅผ ์ถ๋ ฅํ๋ค.
์ด ๊ณผ์ ์ ๊ฑฐ์ณ ๋ค์ฏ ๊ธ์์ ๋ฌธ์ฅ KAKAO๊ฐ 4๊ฐ์ ์์ธ ๋ฒํธ [11, 1, 27, 15]๋ก ์์ถ๋๋ค.
์ ๋ ฅ ํ์
์ ๋ ฅ์ผ๋ก ์๋ฌธ ๋๋ฌธ์๋ก๋ง ์ด๋ค์ง ๋ฌธ์์ด msg๊ฐ ์ฃผ์ด์ง๋ค.
msg์ ๊ธธ์ด๋ 1 ๊ธ์ ์ด์, 1000 ๊ธ์ ์ดํ์ด๋ค.
์ถ๋ ฅ ํ์
์ฃผ์ด์ง ๋ฌธ์์ด์ ์์ถํ ํ์ ์ฌ์ ์์ธ ๋ฒํธ๋ฅผ ๋ฐฐ์ด๋ก ์ถ๋ ฅํ๋ผ.
๋ฌธ์ ํ์ด
- my solution
def solution(msg):
answer = []
# ์ฌ์ ์ด๊ธฐํ
dict={'A':1, 'B':2, 'C':3, 'D':4, 'E':5, 'F':6, 'G':7, 'H':8, 'I':9, 'J':10, 'K':11, 'L':12, 'M':13, 'N':14, 'O':15, 'P':16, 'Q':17, 'R':18, 'S':19, 'T':20, 'U':21 ,'V':22, 'W':23, 'X':24, 'Y':25, 'Z':26}
i=0
idx=27
while i<len(msg):
for j in range(i+1,len(msg)+1):
if msg[i:j] in dict: # ์ฌ์ ์ ์๋ ๊ฐ์ด๋ฉด
if j==len(msg): # ๋ง์ง๋ง ๊ฐ์ด๋ฉด
answer.append(dict[msg[i:j]])
i=j
pass
else: # ์ฌ์ ์ ์์ผ๋ฉด
answer.append(dict[msg[i:j-1]]) # ์์ธ ๋ฒํธ ์ถ๊ฐ
dict[msg[i:j]]=idx # ๋จ์ด ์ฌ์ ์ ๋ฑ๋ก
idx+=1
i=j-1
break
return answer
1) ์ํ๋ฒณ ์์๋๋ก dict๋ฅผ ์ด๊ธฐํ
2) while๋ฌธ์ ์ฌ์ฉํ์ฌ ๋ฌธ์์ด ๋ค ํ์
2-1) ๋ฐ๋ณต๋ฌธ์ ์ฌ์ฉํ์ฌ ์ฌ์ ์์ ํ์ฌ ์ ๋ ฅ๊ณผ ์ผ์นํ๋ ๊ฐ์ฅ ๊ธด ๋ฌธ์์ด w ์ฐพ๊ธฐ
2-2) ์ฌ์ ์ ์์ผ๋ฉด pass ์์ผ๋ฉด ๋จ, ๋ง์ง๋ง ๊ฐ์ด๋ฉด answer์ ์์ธ ๋ฒํธ ์ถ๊ฐ
2-3) ์ฌ์ ์ ์์ผ๋ฉด ๊ทธ ์ ๊น์ง์ ์์ธ ๋ฒํธ๋ฅผ answer์ ์ถ๊ฐํ๊ณ , ๋จ์ด๋ฅผ ์ฌ์ ์ ๋ฑ๋ก
์๊ฐ๐ค
๋ค ํ๊ณ ๋์ ์๊ฐ ์ด๊ณผ๊ฐ ๋ฐ์ํ ๊น ๋ด ๋ฉ์นซํ์ง๋ง ๋ชจ๋ ํ ์คํธ๋ฅผ ํต๊ณผํ์๋ค.
dict์ ๋ฐ๋ณต๋ฌธ์ ์ฌ์ฉํด์ ํด๊ฒฐํ ์ ์๋ ๋ฌธ์ ์๋ค.
์ฌ์ ์์ ์ผ์นํ๋ ๊ฐ์ฅ ๊ธด ๋ฌธ์์ด์ ์ฐพ๋ ๋ฐฉ๋ฒ์ผ๋ก ๋ฐ๋ณต๋ฌธ์ ์ฌ์ฉํ์ฌ ๊ทธ ๋จ์ด๊ฐ
์ฌ์ ์ ์์ผ๋ฉด pass, ์์ผ๋ฉด ๊ทธ ์ ๊น์ง์ ๋จ์ด์ ์์ธ ๋ฒํธ๋ฅผ ์ถ๊ฐํ๊ณ , ํ์ฌ ๋จ์ด๋ฅผ ์ฌ์ ์
๋ฑ๋กํ๋ ๋ฐฉ๋ฒ์ผ๋ก ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์์๋ค.
๋ด๊ฐ ์๊ฐํ๊ธฐ์ ์ด ๋ฌธ์ ์ ํฌ์ธํธ๋
1) ์ฌ์ ์์ ํ์ฌ ์ ๋ ฅ๊ณผ ์ผ์นํ๋ ๊ฐ์ฅ ๊ธด ๋ฌธ์์ด์ ์ฐพ๋ ๋ฐฉ๋ฒ
์ด์๋ ๊ฒ ๊ฐ๋ค.
์ถ์ฒ: ํ๋ก๊ทธ๋๋จธ์ค ์ฝ๋ฉ ํ ์คํธ ์ฐ์ต, https://programmers.co.kr/learn/challenges
'๐Algorithm > ๐ฅprogrammers' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[programmers] 124 ๋๋ผ์ ์ซ์ (0) | 2021.12.01 |
---|---|
[programmers] ๋ก๋์ ์ต๊ณ ์์์ ์ต์ ์์ - 2021 Dev-Matching: ์น ๋ฐฑ์๋ ๊ฐ๋ฐ์ (0) | 2021.11.24 |
[programmers] ์์ ๊ฒ์ - 2021 KAKAO BLIND RECRUITMENT (0) | 2021.09.14 |
[programmers] ๋คํธ์ํฌ (0) | 2021.09.13 |
[programmers] ๋ฒ ์คํธ์จ๋ฒ (0) | 2021.09.10 |