https://leetcode.com/problems/lru-cache/description/
LeetCode - The World's Leading Online Programming Learning Platform
Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.
leetcode.com
이번엔 Doubly Linked List를 쓰되 dummy node를 front와 rear 각각에 둬서 두 개의 더미노드로 구현해봤다.
class Node:
def __init__(self, val=None, prev=None, next=None):
self.val = val
self.prev = prev
self.next = next
class LRUCache:
def __init__(self, capacity: int):
self.capacity = capacity
self.front = Node()
self.rear = Node()
self.front.next = self.rear
self.rear.prev = self.front
self.cache = {}
self.nodemap = {}
def _add_node(self, newnode):
last = self.rear.prev
last.next = newnode
self.rear.prev = newnode
newnode.prev = last
newnode.next = self.rear
self.nodemap[newnode.val] = newnode
def _pop_node(self, node):
p = node.prev
n = node.next
p.next = n
n.prev = p
self.nodemap.pop(node.val)
def get(self, key: int) -> int:
if key in self.cache:
self._pop_node(self.nodemap[key])
self._add_node(Node(key))
return self.cache[key]
else:
return -1
def put(self, key: int, value: int) -> None:
#키가 이미 있는 경우와 없는 경우
#용량이 다 찬 경우와 안찬경우
"""
1. 키가 이미 있고 용량이 찼다. -> 기존 키 삭제하고 새 키 추가
2. 키가 이미 있고 용량이 안찼다. -> 기존 키 삭제하고 새 키 추가
3. 키가 없고 용량이 찼다. -> lru 키를 삭제하고 새 키를 추가
4. 키가 없고 용량이 안찼다. -> 새 키를 추가
"""
if key in self.cache:
self._pop_node(self.nodemap[key])
elif self.capacity == len(self.cache):
self.cache.pop(self.front.next.val)
self._pop_node(self.front.next)
self._add_node(Node(key))
self.cache[key] = value
14분 30초만에 풀었다.
푸는 시간이 비약적으로 줄었다 코드도 훨씬 간결하고 쉬워지고..
오늘 얻은 결론
1. 더미노드 최고
2. 주석으로 경우의 수 적어가면서 각각 어떻게 처리해야될지 써보고 공통된 부분 묶어서 코딩하니까 코드가 훨씬 간결해짐
'코딩 테스트 및 알고리즘 > Grind 75 (Blind 75 Leetcode Questions)' 카테고리의 다른 글
LinkedList : Reverse Nodes in k-Group (0) | 2024.01.18 |
---|---|
LinkedList : Remove Nth Node From End of List (0) | 2024.01.17 |
LinkedList : LRU Cache (Doubly Linked List 해법) (0) | 2024.01.14 |
LinkedList : LRU Cache (Singly Linked List 해법) (0) | 2024.01.14 |
LinkedList : Palindrome Linked List (0) | 2024.01.12 |