프로그래머스
[프로그래머스] [1차] 캐시
띵지니어
2023. 6. 2. 13:11
반응형
https://school.programmers.co.kr/learn/courses/30/lessons/17680
내 코드
# 1차 캐시
from collections import deque
def solution(cacheSize, cities):
cache = deque([])
cities = map(lambda x: x.lower(), cities) # 모두 소문자로 구분
hit = 1
miss = 5
result = 0
for i in cities:
if not i in cache and len(cache) < cacheSize: # 1. 캐시에 없는데, 캐시크기를 초과하지 않은 경우
cache.append(i)
result += miss
elif not i in cache and len(cache) >= cacheSize: # 2. 캐시에 없는데, 캐시크기를 초과한 경우
cache.append(i)
cache.popleft()
result += miss
else: # 3. 캐시에 있는 경우
result += hit
cache.remove(i)
cache.append(i)
return result
Review
구현은 총 3가지로 생각 하였다.
1. 캐시에 없는데, 캐시크기를 초과하지 않은 경우
2. 캐시에 없는데, 캐시크기를 초과한 경우
교체 알고리즘은 LRU 이니 old data를 지웠다.
cache.popleft()
3. 캐시에 있는 경우 ( cache hit )
- LRU
cache 구현에는 deque 을 사용하였다.
deque([old data, ... ,recently data]) 이런 식으로 생각하였고
교체 알고리즘 (LRU) 구현에는 cache 안에 있는 data를 제거한 후 다시 넣으면 가장 최근 data ( LRU ) 가 되므로
cache.remove(i)
cache.append(i)
이렇게 구현 하였다.
문제가 lv2 인 이유는 cache의 개념을 아는지 모르는지도 추가되기 때문에 lv2였던 거 같다..?
개인적으로 구현은 2022-23 년도 lv1 문제가 더 어려웠다.
반응형