๋ฌธ์ ์ค๋ช
์ง๋๊ฐ๋ฐํ์์ ๊ทผ๋ฌดํ๋ ์ ์ด์ง๋ ์ง๋์์ ๋์ ์ด๋ฆ์ ๊ฒ์ํ๋ฉด ํด๋น ๋์์ ๊ด๋ จ๋ ๋ง์ง ๊ฒ์๋ฌผ๋ค์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ฝ์ด ๋ณด์ฌ์ฃผ๋ ์๋น์ค๋ฅผ ๊ฐ๋ฐํ๊ณ ์๋ค.
์ด ํ๋ก๊ทธ๋จ์ ํ
์คํ
์
๋ฌด๋ฅผ ๋ด๋นํ๊ณ ์๋ ์ดํผ์น๋ ์๋น์ค๋ฅผ ์คํํ๊ธฐ ์ ๊ฐ ๋ก์ง์ ๋ํ ์ฑ๋ฅ ์ธก์ ์ ์ํํ์๋๋ฐ, ์ ์ด์ง๊ฐ ์์ฑํ ๋ถ๋ถ ์ค ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ๊ฒ์๋ฌผ์ ๊ฐ์ ธ์ค๋ ๋ถ๋ถ์ ์คํ์๊ฐ์ด ๋๋ฌด ์ค๋ ๊ฑธ๋ฆฐ๋ค๋ ๊ฒ์ ์๊ฒ ๋์๋ค.
์ดํผ์น๋ ์ ์ด์ง์๊ฒ ํด๋น ๋ก์ง์ ๊ฐ์ ํ๋ผ๊ณ ๋ฆ๋ฌํ๊ธฐ ์์ํ์๊ณ , ์ ์ด์ง๋ DB ์บ์๋ฅผ ์ ์ฉํ์ฌ ์ฑ๋ฅ ๊ฐ์ ์ ์๋ํ๊ณ ์์ง๋ง ์บ์ ํฌ๊ธฐ๋ฅผ ์ผ๋ง๋ก ํด์ผ ํจ์จ์ ์ธ์ง ๋ชฐ๋ผ ๋๊ฐํ ์ํฉ์ด๋ค.
์ดํผ์น์๊ฒ ์๋ฌ๋ฆฌ๋ ์ ์ด์ง๋ฅผ ๋์, DB ์บ์๋ฅผ ์ ์ฉํ ๋ ์บ์ ํฌ๊ธฐ์ ๋ฐ๋ฅธ ์คํ์๊ฐ ์ธก์ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
์ ๋ ฅ ํ์
- ์บ์ ํฌ๊ธฐ(cacheSize)์ ๋์์ด๋ฆ ๋ฐฐ์ด(cities)์ ์ ๋ ฅ๋ฐ๋๋ค.
- cacheSize๋ ์ ์์ด๋ฉฐ, ๋ฒ์๋ 0 โฆ cacheSize โฆ 30 ์ด๋ค.
- cities๋ ๋์ ์ด๋ฆ์ผ๋ก ์ด๋ค์ง ๋ฌธ์์ด ๋ฐฐ์ด๋ก, ์ต๋ ๋์ ์๋ 100,000๊ฐ์ด๋ค.
- ๊ฐ ๋์ ์ด๋ฆ์ ๊ณต๋ฐฑ, ์ซ์, ํน์๋ฌธ์ ๋ฑ์ด ์๋ ์๋ฌธ์๋ก ๊ตฌ์ฑ๋๋ฉฐ, ๋์๋ฌธ์ ๊ตฌ๋ถ์ ํ์ง ์๋๋ค. ๋์ ์ด๋ฆ์ ์ต๋ 20์๋ก ์ด๋ฃจ์ด์ ธ ์๋ค.
์ถ๋ ฅ ํ์
- ์ ๋ ฅ๋ ๋์์ด๋ฆ ๋ฐฐ์ด์ ์์๋๋ก ์ฒ๋ฆฌํ ๋, "์ด ์คํ์๊ฐ"์ ์ถ๋ ฅํ๋ค.
์กฐ๊ฑด
- ์บ์ ๊ต์ฒด ์๊ณ ๋ฆฌ์ฆ์ LRU(Least Recently Used)๋ฅผ ์ฌ์ฉํ๋ค.
- cache hit์ผ ๊ฒฝ์ฐ ์คํ์๊ฐ์ 1์ด๋ค.
- cache miss์ผ ๊ฒฝ์ฐ ์คํ์๊ฐ์ 5์ด๋ค.
์ ์ถ๋ ฅ ์์
์บ์ํฌ๊ธฐ | ๋์์ด๋ฆ | ์คํ์๊ฐ |
3 | ["Jeju", "Pangyo", "Seoul", "NewYork", "LA", "Jeju", "Pangyo", "Seoul", "NewYork", "LA"] | 50 |
3 | ["Jeju", "Pangyo", "Seoul", "Jeju", "Pangyo", "Seoul", "Jeju", "Pangyo", "Seoul"] | 21 |
2 | ["Jeju", "Pangyo", "Seoul", "NewYork", "LA", "SanFrancisco", "Seoul", "Rome", "Paris", "Jeju", "NewYork", "Rome"] | 60 |
5 | ["Jeju", "Pangyo", "Seoul", "NewYork", "LA", "SanFrancisco", "Seoul", "Rome", "Paris", "Jeju", "NewYork", "Rome"] | 52 |
2 | ["Jeju", "Pangyo", "NewYork", "newyork"] | 16 |
0 | ["Jeju", "Pangyo", "Seoul", "NewYork", "LA"] | 25 |
ํ์ด ์ฝ๋
from collections import deque
def solution(cacheSize, cities):
if cacheSize == 0:
return len(cities) * 5
cache = deque()
answer = 0
for city in cities:
city = city.lower()
if city in cache:
answer += 1
cache.remove(city)
cache.append(city)
else:
if len(cache) < cacheSize:
answer += 5
cache.append(city)
else:
answer += 5
cache.popleft()
cache.append(city)
return answer
์บ์์ LRU ์๊ณ ๋ฆฌ์ฆ์ ์๊ณ ์์ด์ผ ํ๋ค.
Least Recent Used ์บ์ ์๊ณ ๋ฆฌ์ฆ์, ๊ฐ์ฅ ์ต๊ทผ์ ์ฌ์ฉ๋์ง ์์ ์บ์๋ฅผ ๊ต์ฒดํ๋ ์๊ณ ๋ฆฌ์ฆ์ด๋ค.
์๋ฃ๊ตฌ์กฐ queue๋ฅผ ์ฌ์ฉํ๋ฉด, ๊ฐ์ฅ ์ต๊ทผ์ ์ฌ์ฉ๋์ง ์์ ์บ์๋ popleft๋ฅผ ํตํด ๊บผ๋ผ ์ ์์๊ฑฐ๋ผ ์๊ฐํด, ํ๋ฅผ ์ฌ์ฉํ๋ค.
๋ฌธ์ ๋ฅผ ํ์ดํ๋ฉฐ ์ฃผ์ํ ์ ์ด ๋ช ๊ฐ์ง ์๋ค.
1) ์บ์ ์ฌ์ด์ฆ๊ฐ 0์ธ ๊ฒฝ์ฐ์ ๋ํ ์ฒ๋ฆฌ๊ฐ ํ์ํ๋ค. ๋ฌธ์ ๋ฅผ ์ ์ฝ์.
2) ๋ฐ์ดํฐ๊ฐ ์๋ก ๋ค์ด์์ ๋, ์ด๋ฏธ ์บ์์ ์๋ ๋ฐ์ดํฐ๋ผ๋ฉด ์๊ฐ๋ง 1 ์ถ๊ฐํ๋ ๊ฒ์ด ์๋๋ผ ํ ๋ด์ ๋ฐ์ดํฐ ์์น๋ฅผ ์ฎ๊ฒจ์ผ ํ๋ค. ๋ค์ ์ฌ์ฉํ ์บ์ ์ด๋ฏ๋ก, ๊ฐ์ฅ ์ต๊ทผ์ ์ฌ์ฉํ ์บ์๊ฐ ๋์ด์ผ ํ๋ ๋ง์ด๋ค.
'๐ ์ฝ๋ฉํ ์คํธ ๋๋น : PS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ํ๋ก๊ทธ๋๋จธ์ค] ํ๋ ฌ์ ๊ณฑ์ (level2, python) (0) | 2022.09.09 |
---|---|
[ํ๋ก๊ทธ๋๋จธ์ค] ์ ํ์ ์๊ฐ์ด๋ (level2, python) (0) | 2022.09.09 |
[ํ๋ก๊ทธ๋๋จธ์ค] ์ต๊ณ ์ ์งํฉ (level3, python) (0) | 2022.09.09 |
[ํ๋ก๊ทธ๋๋จธ์ค] ์์ ๋์งํ (level2, python) (0) | 2022.09.09 |
[ํ๋ก๊ทธ๋๋จธ์ค] ๋ฉ๋ฆฌ ๋ฐ๊ธฐ (level2, python) (0) | 2022.09.09 |