[1스4코2파] # 199 LeetCode 146. LRU Cache

gunny·2023년 7월 21일
0

코딩테스트

목록 보기
200/530
post-thumbnail

[1스4코2파] 1명의 스위프트 개발자와 4명의 코틀린 개발자, 2명의 파이썬 개발자코딩 테스트 서막 : 1스4코1파

Rule :

하루에 1문제씩 풀기.
한 문제당 30분씩은 고민하기.
왜 그렇게 풀었는지 공유하기.
하루라도 놓친다면 벌금은 1,000원
백준 플래티넘, 프로그래머스 4단계, 개발자 탈퇴 시 모임 탈퇴 가능

START :

[3코1파] 2023.01.04~ (199차)
[4코1파] 2023.01.13~ (191일차)
[1스4코1파] 2023.04.12~ (102일차)
[1스4코2파] 2023.05.03 ~ (80일차)

Today :

2023.07.21 [199일차]
linked list

146. LRU Cache

https://leetcode.com/problems/lru-cache/

문제 설명

LRU 캐시의 제약 조건을 따르는 데이터 구조를 설계하는 LRUCache 클래스를 구현함

LRUCache(int 용량) 양수 크기 용량으로 LRU 캐시를 초기화하고, get 메서드에서 key가 존재하면 키 값을 반환 아니면 -1을 반환하고, put의 경우에는 key 가 존재하면 key에 해당하는 value값을 업데이트하고, 없다면 key-value 쌍을 추가한다. key 수가 용량ㅇ르 초과하면 가장 최근에 사용한 키를 제거한다.
각 get, put 은 시간복잡도 O(1)로 이뤄져야함

문제 풀이 방법

linked list node 클래스랑 그에 대한 remove, insert 메소드를 추가해서 풀어줘야 하는 문제네... 에효효

내 코드

class Node:
    def __init__(self, key, val):
        self.key, self.val = key, val
        self.prev = self.next = None

class LRUCache:

    def __init__(self, capacity: int):
        self.cap = capacity
        self.cache = {}
        
        self.left, self.right = Node(0,0), Node(0,0)
        self.left.next, self.right.prev = self.right, self.left

    def remove(self, node):
        prev, nxt = node.prev, node.next
        prev.next, nxt.prev = nxt, prev
        

    def insert(self, node):
        prev, nxt = self.right.prev, self.right
        prev.next = nxt.prev = node
        node.next, node.prev = nxt, prev

    def get(self, key: int) -> int:
        if key in self.cache:
            self.remove(self.cache[key])
            self.insert(self.cache[key])
            return self.cache[key].val
        return -1

    def put(self, key: int, value: int) -> None:
        if key in self.cache:
            self.remove(self.cache[key])
        self.cache[key] = Node(key, value)
        self.insert(self.cache[key])

        if len(self.cache) > self.cap:
            lru = self.left.next
            self.remove(lru)
            del self.cache[lru.key]

증빙

여담

지금으로부터 3시간 뒤 나는 서울 신궁동감자탕에서 뼈구이를 먹을 것이다.

profile
꿈꾸는 것도 개발처럼 깊게

0개의 댓글