Algorithm/프로그래머스

[프로그래머스/Python파이썬] 캐시(2018 카카오 코딩테스트 1차)

meeeeejin 2021. 4. 27. 15:46

문제 링크: programmers.co.kr/learn/courses/30/lessons/17680

코딩테스트 연습 - [1차] 캐시

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", "Ro

programmers.co.kr

 

 

문제 설명

LRU 알고리즘을 사용하기 위해 리스트를 이용합니다. 리스트의 맨 앞부분에 있는 요소를 제일 오래 참조가 안된 것(LRU)으로 보고 맨 뒤에 있는 요소를 제일 최근에 참조된 것(MRU)으로 생각합니다. 

또한 캐시의 크기가 0인 경우를 예외 처리해주어야 합니다. 

 

  1. 캐시의 크기가 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