본문 바로가기
Coding Test/Python

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

by giem 2022. 9. 27.
반응형

2022.09.20 - [Project/Lotto] - [프로젝트] 로또 웹 만들기(next js, firebase, git action)

최근에 계속 로또 프로젝트를 하느라 블로그 신경을 못썼다.

 

오랜만에 코딩 테스트를 다시 포스트 해보겠다.

2018년 카카오 블라인드 테스트 1차 문제인 캐시이다.

레벨은 2로 되어있지만 쉬운 편이다.


문제

문제는 쉽게 이해할 수 있다.

여기서 입력 형식의 마지막 문장을 주의해서 소문자든 대문자든 맞춰주어야 한다.


구현

구현은 쉽다.

LRU란 최근에 가장 많이 안 쓰인 것을 캐시에서 제외하는 로직이다.

그러므로 새로운 것을 계속 넣어주고 기존의 것은 빼주는 queue를 선택하고

그중에서도 성능을 위해 deque방식을 택했다.

 

cache hit 시 cache에 있던 것을 다시 가장 최근으로 옮겨주는 방식을 선택했다.

사실 다른 방식이 더 있지는 않을 것 같다.


코드
from collections import deque 

def solution(cacheSize, cities):  
    answer = 0

    queue=deque()

    if cacheSize==0:
        return len(cities)*5

    for city in cities:
        city = city.lower()
        if city in queue:
            answer +=1
            del queue[queue.index(city)]
        else:
            if cacheSize==len(queue):
                queue.popleft()
            answer +=5

        queue.append(city)

    return answer

간단하게 구현할 수 있다.


다른 풀이

기존에 모르던 option인데 deque에 maxlen을 쓸 수 있었다.

 

코드를 첨부하겠다.

def solution(cacheSize, cities):
    import collections
    cache = collections.deque(maxlen=cacheSize)
    time = 0
    for i in cities:
        s = i.lower()
        if s in cache:
            cache.remove(s)
            cache.append(s)
            time += 1
        else:
            cache.append(s)
            time += 5
    return time

오랜만에 파이썬을 해서 remove가 안 되는 줄 알고 del을 사용했는데

어렵게 돌아간 것 같다.

 

제일 크게 배운건 maxlen이다.

새로운 게 들어가면 기존의 것은 자동으로 삭제되어 아주 유용한 기능이다.

 

반응형

댓글