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

이윤성·2022년 3월 24일
0

문제

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

풀이

  • 해당 문제는 LRU를 구현하는 문제로, 파이썬의 deque와 maxlen을 알고 있으면 쉽게 풀 수 있다.

  • 하지만 나는 maxlen을 모르는 상태였기에 상대적으로 복잡한 코드를 짰었다.

  • 먼저 데이터가 LRU에 존재하는지 확인한 후

    • 존재하면 해당 데이터를 LRU에서 빼고 마지막에 넣어주는 방식을 사용하여 hit를 구현했다.
    • 존재하지 않으면 LRU의 용량이 남아있을때와 남아 있지 않을 때로 나누었다.
      • 용량이 남아있으면, 그대로 넣어주었다
      • 용량이 남아 있지 않다면, 기존 데이터인 맨 앞을 빼고 새로운 데이터를 넣어주었다.
  • 이 때, cacheSize가 0인 경우 코드 오류가 나기에 미리 전처리를 해주었다

코드

  • 처음 코드
from collections import deque

def solution(cacheSize, cities):
    if cacheSize == 0:
        answer = len(cities) * 5
        return answer
    
    answer = 0
    memory = deque()

    for city in cities:
        city = city.lower()
        if city in memory:
            memory.remove(city)
            answer += 1
        else:
        	if len(memory) >= cacheSize:
            	memory.popleft()
            answer += 5
		memory.append(city)
    return answer
  • maxlen을 사용한 코드
from collections import deque
def solution(cacheSize, cities):
    answer = 0
    memory = deque(maxlen=cacheSize)
    
    for city in cities:
        city = city.lower()
        if city in memory:
            memory.remove(city)
            answer += 1
        else:            
            answer += 5
        memory.append(city)
    return answer

0개의 댓글

관련 채용 정보