[programmers ] 캐시 (2018 카카오 블라인드 채용)

resilient

·

2021. 9. 1. 19:08

728x90
반응형

https://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 알고리즘은 이 블로그 를 참고했다.
  • LRU 알고리즘만 이해하면 나머지는 쉽게 해결되었다.
  • 여기서 처음에 cacheSize가 0일 때 처리를 안해서 시간이 더 소요됐다.
def solution(cacheSize, cities):
    # 캐시사이즈가없으면 참조할게 없으니까 실행시간이 5씩 소요된다.
    if cacheSize == 0:
        return len(cities) * 5
    else:
        cache = []
        answer = 0
        for city in cities:
            # Miss!
            city = city.lower()
            if city not in cache:
                answer += 5
                if len(cache) < cacheSize:
                    cache.append(city)
                else:
                    cache.pop(0)
                    cache.append(city)
            # Hit!
            else:
                answer += 1
                cache.pop(cache.index(city))
                cache.append(city)

        return answer
반응형