프로그래머스

[프로그래머스] [1차] 캐시

띵지니어 2023. 6. 2. 13:11

https://school.programmers.co.kr/learn/courses/30/lessons/17680

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

내 코드

# 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 문제가 더 어려웠다.