[1차] 캐시 | 프로그래머스 문제풀이 (Python)

이주원·2021년 10월 7일
6
post-thumbnail

🔎 [1차] 캐시 - 문제 링크

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


🧾 코드

def solution(cacheSize, cities):
    time, cache = 0, []
    for city in list(map(lambda x: x.lower(), cities)):
        if city in cache:
            time += 1
            del cache[cache.index(city)]
            cache.insert(0, city)
        else:
            time += 5
            cache.insert(0, city)
            if len(cache) == cacheSize + 1:
                del cache[-1]
    return time

🎈 풀이

이 문제는 LRU알고리즘을 구현하는 문제이다. LRU알고리즘은 Least Recently Used의 약자로 가장 최근에 사용되지 않은 것 정도의 뜻을 가지고 있다. 여기서 난 두 가지의 방법을 생각했는데,
첫 번째로는 데이터가 언제 쓰였는지 저장해 추가할 때 가장 오랫동안 쓰이지 않은 데이터를 삭제하는 방식과, 데이터가 추가됬을 때 만약 캐시내 존재하지 않으면 큐 위에 보내고, 존재한다면 값을 지운 후 큐 위에 보내 맨 아래에 있는 데이터를 삭제하는 방법이다. 난 후자의 방식을 택했다.

또한 문제 조건에 '대소문자를 구분하지 않음' 이 있어 map과 lambda함수를 이용해 모두 lower() 해주었고, cache가 0인 경우까지 구현했다.

0개의 댓글