<[1์ฐจ] ์บ์>
๋ฌธ์ (์ถ์ฒ: https://school.programmers.co.kr/learn/courses/30/lessons/17680)
๋ฌธ์ ํ์ด
- 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