์ฝ๋ฉ ํ ์คํธ ์ฐ์ต - 2018 KAKAO BLIND RECRUITMENT
<[1์ฐจ] ์บ์>
๋ฌธ์ ์ค๋ช
์ง๋๊ฐ๋ฐํ์์ ๊ทผ๋ฌดํ๋ ์ ์ด์ง๋ ์ง๋์์ ๋์ ์ด๋ฆ์ ๊ฒ์ํ๋ฉด ํด๋น ๋์์ ๊ด๋ จ๋ ๋ง์ง ๊ฒ์๋ฌผ๋ค์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ฝ์ด ๋ณด์ฌ์ฃผ๋ ์๋น์ค๋ฅผ ๊ฐ๋ฐํ๊ณ ์๋ค.
์ด ํ๋ก๊ทธ๋จ์ ํ ์คํ ์ ๋ฌด๋ฅผ ๋ด๋นํ๊ณ ์๋ ์ดํผ์น๋ ์๋น์ค๋ฅผ ์คํํ๊ธฐ ์ ๊ฐ ๋ก์ง์ ๋ํ ์ฑ๋ฅ ์ธก์ ์ ์ํํ์๋๋ฐ, ์ ์ด์ง๊ฐ ์์ฑํ ๋ถ๋ถ ์ค ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ๊ฒ์๋ฌผ์ ๊ฐ์ ธ์ค๋ ๋ถ๋ถ์ ์คํ์๊ฐ์ด ๋๋ฌด ์ค๋ ๊ฑธ๋ฆฐ๋ค๋ ๊ฒ์ ์๊ฒ ๋์๋ค.
์ดํผ์น๋ ์ ์ด์ง์๊ฒ ํด๋น ๋ก์ง์ ๊ฐ์ ํ๋ผ๊ณ ๋ฆ๋ฌํ๊ธฐ ์์ํ์๊ณ , ์ ์ด์ง๋ DB ์บ์๋ฅผ ์ ์ฉํ์ฌ ์ฑ๋ฅ ๊ฐ์ ์ ์๋ํ๊ณ ์์ง๋ง ์บ์ ํฌ๊ธฐ๋ฅผ ์ผ๋ง๋ก ํด์ผ ํจ์จ์ ์ธ์ง ๋ชฐ๋ผ ๋๊ฐํ ์ํฉ์ด๋ค.
์ดํผ์น์๊ฒ ์๋ฌ๋ฆฌ๋ ์ ์ด์ง๋ฅผ ๋์, DB ์บ์๋ฅผ ์ ์ฉํ ๋ ์บ์ ํฌ๊ธฐ์ ๋ฐ๋ฅธ ์คํ์๊ฐ ์ธก์ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
์ ๋ ฅ ํ์
- ์บ์ ํฌ๊ธฐ(cacheSize)์ ๋์ ์ด๋ฆ ๋ฐฐ์ด(cities)์ ์ ๋ ฅ๋ฐ๋๋ค.
- cacheSize๋ ์ ์์ด๋ฉฐ, ๋ฒ์๋ 0 โฆ cacheSize โฆ 30 ์ด๋ค.
- cities๋ ๋์ ์ด๋ฆ์ผ๋ก ์ด๋ค์ง ๋ฌธ์์ด ๋ฐฐ์ด๋ก, ์ต๋ ๋์ ์๋ 100,000๊ฐ์ด๋ค.
- ๊ฐ ๋์ ์ด๋ฆ์ ๊ณต๋ฐฑ, ์ซ์, ํน์๋ฌธ์ ๋ฑ์ด ์๋ ์๋ฌธ์๋ก ๊ตฌ์ฑ๋๋ฉฐ, ๋์๋ฌธ์ ๊ตฌ๋ถ์ ํ์ง ์๋๋ค. ๋์ ์ด๋ฆ์ ์ต๋ 20์๋ก ์ด๋ฃจ์ด์ ธ ์๋ค.
์ถ๋ ฅ ํ์
- ์ ๋ ฅ๋ ๋์ ์ด๋ฆ ๋ฐฐ์ด์ ์์๋๋ก ์ฒ๋ฆฌํ ๋, ์ด ์คํ์๊ฐ์ ์ถ๋ ฅํ๋ค.
์กฐ๊ฑด
- ์บ์ ๊ต์ฒด ์๊ณ ๋ฆฌ์ฆ์ LRU(Least Recently Used)๋ฅผ ์ฌ์ฉํ๋ค.
- cache hit์ผ ๊ฒฝ์ฐ ์คํ์๊ฐ์ 1์ด๋ค.
- cache miss์ผ ๊ฒฝ์ฐ ์คํ์๊ฐ์ 5์ด๋ค.
๋ฌธ์ ํ์ด
- my solution
def solution(cacheSize, cities):
answer = 0
result=[]
for i in range(len(cities)):
cities[i]=cities[i].lower() #๋๋ฌธ์, ์๋ฌธ์ ์๊ด x
if(cacheSize==0): #cacheSize๊ฐ 0์ด๋ฉด ๋ค ์คํ ์๊ฐ 5
answer=len(cities)*5
break
if(cities[i] in result): #๊ฐ์ด ์์ผ๋ฉด
result.pop(result.index(cities[i]))
result.append(cities[i]) #๋งจ ๋์ผ๋ก
answer+=1 # 1
else:
if(len(result)==cacheSize): #์บ์ ํฌ๊ธฐ๋งํผ ๋ค ์ฑ์์ ธ์์ผ๋ฉด
result.pop(0) #์ ์ผ ์์ฐ๋ ๊ฒ pop
answer+=5 #5
result.append(cities[i])
return answer
์ด ๋ฌธ์ ์์ ์บ์ ๊ต์ฒด ์๊ณ ๋ฆฌ์ฆ์ผ๋ก LRU(Least Recently Used)๋ฅผ ์ฌ์ฉํ๋ค.
LRU ์๊ณ ๋ฆฌ์ฆ์ ๋ํด ๊ฐ๋จํ๊ฒ ๋งํ์๋ฉด ์ ์ผ ์ค๋ซ๋์ ์ฐธ์กฐ๋์ง ์์ ๋ฐ์ดํฐ๋ฅผ ์ ๊ฑฐํ๋ ๋ฐฉ์์ด๋ผ๊ณ ํ ์ ์๋ค.
์ฒ์์๋ ์ด ๋ฌธ์ ๋ฅผ dict๋ฅผ ์ฌ์ฉํ์ฌ ํด๊ฒฐํ๋ ค ํ์ง๋ง ์ฝ๋๋ฅผ ๊ตฌํํ๋ค ๋ณด๋ ๋จ์ list๋ก ๊ฐ๋ฅํ ๊ฒ ๊ฐ์
๋ค์ ์ฒ์๋ถํฐ ์ฝ๋๋ฅผ ๊ตฌํํ์๋ค.
1) cities list ์ํ
1-1) ๋๋ฌธ์, ์๋ฌธ์ ์๊ด์ด ์์ผ๋ฏ๋ก ์๋ฌธ์๋ก ๋ค ๋ฐ๊ฟ์ ์ ์ฅ
1-2) cacheSize๊ฐ 0์ด๋ฉด ์ ์ฅํ ๊ณณ์ด ์์ด ๋ค miss์ด๋ฏ๋ก cities์ ๊ธธ์ด๋งํผ 5๋ฅผ ๊ณฑํ ํ ์ข ๋ฃ
1-3) list ์์ ๊ฐ์ด ์๋ค๋ฉด ์ด๋ฏธ ํ๋ฒ ์ด ์ ์ด ์์ด ์บ์ ์์ ์๋ค๋ ๋ป
-> ์ต๊ทผ์ ์ฌ์ฉํ๋ค๋ ๊ฒ์ ๋ํ๋ด๊ธฐ ์ํด ๋ฆฌ์คํธ์ ๋งจ ๋ค๋ก ๋ณด๋
-> hit ์ด๋ฏ๋ก ์คํ์๊ฐ 1 ์ถ๊ฐ
1-4) list ์์ ๊ฐ์ด ์๋ ๊ฒฝ์ฐ
1-4-1) ์บ์ ํฌ๊ธฐ๋งํผ ์บ์๊ฐ ๋ค ์ฐจ์์ผ๋ฉด -> ์ ์ผ ์ ์ฐ๋ ๊ฒ์ ๋งจ ์์ ์๋ฏธํ๋ฏ๋ก ๋งจ ์ ๊ฐ pop
1-4-2) miss๋ฅผ ๋ํ๋ด๋ฏ๋ก ์คํ์๊ฐ 5 ์ถ๊ฐ
1-4-3) ์บ์์ ์ ์ฅ
์ถ์ฒ: ํ๋ก๊ทธ๋๋จธ์ค ์ฝ๋ฉ ํ ์คํธ ์ฐ์ต, https://programmers.co.kr/learn/challenges