📖이 포스팅은 '파이썬 알고리즘 인터뷰 - 박상길님' 책을 보고 작성되었습니다.
😎문제 : https://leetcode.com/problems/design-circular-deque/submissions/
다음 연산을 제공하는 원형 데크를 디자인 하라.
[이중 연결 리스트를 이용한 데크 구현]
class MyCircularDeque:
def __init__(self, k: int):
self.head, self.tail = ListNode(None),ListNode(None)
self.k, self.len = k, 0
self.head.right, self.tail.left = self.tail, self.head
def _add(self,node:ListNode, new: ListNode):
n = node.right
node.right = new
new.left, new.right = node, n
n.left=new
def _del(self, node:ListNode):
n = node.right.right
node.right =n
n.left = node
def insertFront(self, value: int) -> bool:
if self.len == self.k:
return False
self.len += 1
self._add(self.head, ListNode(value))
return True
def insertLast(self, value: int) -> bool:
if self.len == self.k:
return False
self.len += 1
self._add(self.tail.left, ListNode(value))
return True
def deleteFront(self) -> bool:
if self.len == 0:
return False
self.len -= 1
self._del(self.head)
return True
def deleteLast(self) -> bool:
if self.len == 0:
return False
self.len -= 1
self._del(self.tail.left.left)
return True
def getFront(self) -> int:
return self.head.right.val if self.len else -1
def getRear(self) -> int:
return self.tail.left.val if self.len else -1
def isEmpty(self) -> bool:
return self.len == 0
def isFull(self) -> bool:
return self.len == self.k
'자료구조와 알고리즘 > 🥑알고리즘' 카테고리의 다른 글
[알고리즘][해시 테이블] - 1. 해시맵 디자인 (0) | 2022.03.06 |
---|---|
[알고리즘][데크 & 우선순위 큐] - 2. k개 정렬리스트 병합 (0) | 2022.03.04 |
[알고리즘][스택 & 큐] - 6. 원형 큐 디자인 (0) | 2022.03.02 |
[알고리즘][스택 & 큐] - 5. 스택을 이용한 큐 구현 (0) | 2022.03.02 |
[알고리즘][스택 & 큐] - 4. 큐를 이용한 스택 구현 (0) | 2022.03.02 |