문제 링크: programmers.co.kr/learn/courses/30/lessons/17680
문제 설명
LRU 알고리즘을 사용하기 위해 리스트를 이용합니다. 리스트의 맨 앞부분에 있는 요소를 제일 오래 참조가 안된 것(LRU)으로 보고 맨 뒤에 있는 요소를 제일 최근에 참조된 것(MRU)으로 생각합니다.
또한 캐시의 크기가 0인 경우를 예외 처리해주어야 합니다.
- 캐시의 크기가 0인 경우 모두 cache miss 처리하여 답을 반환
소스코드
def solution(cacheSize, cities): execTime = 0 cache = [] # 캐시가 없을 경우 if cacheSize == 0: return len(cities) * 5 for city in cities: # cache hit if city.lower() in cache: cache.remove(city.lower()) cache.append(city.lower()) # 해당 도시를 리스트의 맨 뒤로 보내기 execTime += 1 # cache miss else: if len(cache) == cacheSize: cache.pop(0) # LRU 알고리즘으로 캐시 교체 cache.append(city.lower()) execTime += 5 return execTime
728x90
'Algorithm > 프로그래머스' 카테고리의 다른 글
[프로그래머스/Python파이썬] 뉴스 클러스터링(2018 카카오 코딩테스트 1차) (0) | 2021.05.03 |
---|---|
[프로그래머스/Python파이썬] 셔틀버스(2018 카카오 코딩테스트 1차) (0) | 2021.04.27 |
[프로그래머스 / Python 파이썬] 다트 게임(2018 카카오 코딩테스트 1차) (0) | 2021.04.09 |
[프로그래머스 / Python] 비밀지도(2018 카카오 코딩테스트 1차) (0) | 2021.04.09 |
[프로그래머스 / Python] 도둑질 (0) | 2021.04.06 |