π‘λ°ν¬ κΈ°λ³Έ κ°λ
- μ€ν(stack)κ³Ό ν(Queue)μ μ°μ°μ λͺ¨λ κ°μ§κ³ μλ λ³΅ν© μλ£ν μλ£κ΅¬μ‘°
- λ°ν¬(Deque) : Double Ended Queueμ μ€μλ§λ‘μ μμͺ½ λ λ°μ΄ν°λ₯Ό λͺ¨λ μΆμΆν μ μλ νμ νν
- λ°ν¬ μλ£κ΅¬μ‘°λ μμͺ½ λμμ μ½μ μμ λͺ¨λ κ°λ₯νλ€
- νμ΄μ¬μμλ λ°ν¬ μλ£κ΅¬μ‘°λ₯Ό collections λΌμ΄λΈλ¬λ¦¬λ₯Ό νμ©νμ¬ μ¬μ© κ°λ₯νλ€
- λ°ν¬ μλ£κ΅¬μ‘°λ μ΄μ€ μ°κ²° 리μ€νΈλ‘ ꡬννλ κ²μ΄ μ μ©νλ€. ν¬μΈν°λ₯Ό 2κ° νμ©ν΄μ μλ€μμ μ½μ μμ κ° κ°λ₯νλ€.
π‘λ°ν¬ μλ£κ΅¬μ‘° μ§μ ꡬν
- λ€μ μ°μ°μ μ§μνλ μν λ°ν¬λ₯Ό λμμΈνλΌ
- MyCircularDeque(k: int) - kκ°μΌλ‘ μ΅λ μν λ°ν¬μ μ¬μ΄μ¦ μ΄κΈ°ννκΈ°
- insertFront(value: int) - μ λ ₯κ°(value)μ λ°ν¬μ μμͺ½μ μ½μ νκ³ , μ±κ³΅νλ€λ©΄ True, μ€ν¨νλ€λ©΄ False λ°ννκΈ°
- insertLast(vlaue: int) - μ λ ₯κ°(value)μ λ°ν¬μ λ€μͺ½μ μ½μ νκ³ , μ±κ³΅νλ€λ©΄ True, μ€ν¨νλ€λ©΄ False
- deleteFront() - λ°ν¬ μλ£κ΅¬μ‘°μ 맨 μμ κ°μ μμ νκ³ , μ±κ³΅νλ€λ©΄ True, μ€ν¨νλ€λ©΄ False
- deleteLast() - λ°ν¬ μλ£κ΅¬μ‘°μ 맨 λ€μ κ°μ μμ νκ³ , μ±κ³΅νλ€λ©΄ True, μ€ν¨νλ€λ©΄ False
- getFront() - λ°ν¬ μλ£κ΅¬μ‘°μ 맨 μμ κ°μ λ°ννλ λ§μ½ κ°μ΄ μλ€λ©΄ -1μ λ°ν
- getLast() - λ°ν¬ μλ£κ΅¬μ‘°μ 맨 λ€μ κ°μ λ°ννλ λ§μ½ κ°μ΄ μλ€λ©΄ -1μ λ°ν
- isEmpty() - λ°ν¬ μλ£κ΅¬μ‘°μ κ°μ΄ λΉμ΄μλ€λ©΄ True, μλλ©΄ False
- isFull() - λ°ν¬ μλ£κ΅¬μ‘°μ κ°μ΄ κ°λ μ°¨ μλ€λ©΄ True, μλλ©΄ False
- μ΄μ€ μ°κ²° 리μ€νΈλ₯Ό νμ©νμ¬ μν λ°ν¬ μλ£κ΅¬μ‘° ꡬν
π» μν λ°ν¬ μ΄κΈ°ν
class MyCircularDeque(object):
def __init__(self, k):
"""
:type k: int
"""
# μΌμͺ½(head), μ€λ₯Έμͺ½(tail) index μν μ ν μ°κ²°λ¦¬μ€νΈ μ μ
self.head, self.tail = ListNode(None), ListNode(None)
self.head.right, self.tail.left = self.tail, self.head
# μ΅λ κΈΈμ΄μ νμ¬ κΈΈμ΄ μ 보λ₯Ό λ΄μ λ³μ μ μ
self.maxlen, self.length = k, 0
π» μν λ°ν¬ λ°μ΄ν° μΆκ° λ΄μ₯ν¨μ
def _add(self, node: ListNode, new: ListNode):
# μ½μ
ν μ°κ²° 리μ€νΈμ κΈ°μ‘΄ μ€λ₯Έμͺ½ κ°μ μ μνλ€
# μλ§ None κ°μΌ κ²μΌλ‘ μμνλ€.
# front : n --> self.head.right.right --> self.tail.right
# last n --> self.tail.left.right --> self.head.right
n = node.right
# μ°κ²° 리μ€νΈμ μ€λ₯Έμͺ½ κ°μ μλ‘μ΄ κ°μΌλ‘ μ
λ°μ΄νΈνλ€.
# front : self.head.right.right == ListNode(value)
# last : self.tail.left.right == ListNode(value)
node.right = new
# μλ‘μ΄ λ
Έλμ left κ°μ κΈ°μ‘΄ nodeμ κ°μΌλ‘ μ μνκ³ (μ¦, head μν )
# right κ°μ μμμ λ°λ‘ μ μν None κ°μΌλ‘ μ μν΄μ€λ€
# head - new - None
new.left, new.right = node, n
# κ·Έλ¦¬κ³ nμ left κ°μ μλ‘μ΄ κ°μΌλ‘ μ μνλ€.
# front : n = self.head.right.right
# last : n = self.tail.left.right
n.left = new
π» μν λ°ν¬ λ°μ΄ν° μμ λ΄μ₯ν¨μ
def _del(self, node: ListNode):
# ? None κ°μ 미리 μ μνλ건κ°?
n = node.right.right
# μ
λ°μ΄νΈ
node.right = n
# ? nμ μΌμͺ½ κ°μ μ
λ ₯ν ν¬μΈν°μ κ°μΌλ‘ μ μ? μ?
n.left = node
π» μν λ°ν¬ μμͺ½, λ€μͺ½ λ°μ΄ν° μΆκ°
def insertFront(self, value):
"""
:type value: int
:rtype: bool
"""
# νμ¬ κΈΈμ΄ μ 보λ₯Ό νμΈνλ€
# νμ¬ κΈΈμ΄κ° μ΅λ κΈΈμ΄μ κ°λ€λ©΄ λμ΄μ μ½μ
ν μ μκΈ°μ Falseλ₯Ό return
if self.length == self.maxlen:
return False
# νμ¬ κΈΈμ΄κ° μμ§ μ΅λ κΈΈμ΄μ λλ¬νμ§ μμλ€λ©΄ λ°μ΄ν°λ₯Ό μ½μ
ν κ²μ΄κΈ°μ
# νμ¬ κΈΈμ΄λ₯Ό μ
λ°μ΄νΈ ν΄μ€λ€
self.length += 1
# valueκ°μ μν λ°ν¬ μλ£κ΅¬μ‘°μ μΆκ°ν΄μ€λ€.
# λ΄μ₯ ν¨μ _add λ©μλλ₯Ό μ¬μ©ν μμ
# value κ°μ μ°κ²°λ¦¬μ€νΈ μλ£κ΅¬μ‘° ννμ λ΄μμ μΆκ°νλ€.
self._add(self.head, ListNode(value))
def insertLast(self, value):
"""
:type value: int
:rtype: bool
"""
# νμ¬ κΈΈμ΄ νμΈνμ¬ μ΅λ κΈΈμ΄μ λλ¬νλ€λ©΄ False return
if self.length == self.maxlen:
return False
# νμ¬ κΈΈμ΄ μ
λ°μ΄νΈ
self.length += 1
# λ€μͺ½μ κ°μ μ½μ
ν λλ self.tail ν¬μΈν°λ₯Ό νμ©
# self.tail.left == μ΄κΈ°μ self.headλ‘ μ§μ νμ
# μ
λ°μ΄νΈ λ κ²μΌλ‘ μμνλ©΄μ μμ
self._add(self.tail.left, ListNode(value))
π» μν λ°ν¬ μμͺ½, λ€μͺ½ λ°μ΄ν° μμ
def deleteFront(self):
# μμ ν κ°μ΄ μλ€λ©΄ False return
if self.length == 0:
return False
# νμ¬ κΈΈμ΄ μ
λ°μ΄ν°
self.length -= 1
# μμ λ‘μ§
self._del(self.head)
return True
def deleteLast(self):
# μμ ν κ°μ΄ μλ€λ©΄ False return
if self.length == 0:
return False
# νμ¬ κΈΈμ΄ μ
λ°μ΄ν°
self.length -= 1
# μμ λ‘μ§
# λ· λΆλΆμ μμ ν λλ tail ν¬μΈν°λ₯Ό νμ©νλλ°
# μ left.leftμ κ°μ λ£μ΄μ£Όλμ§ κΆκΈν¨
self._del(self.tail.left.left)
π» μν λ°ν¬ λ°μ΄ν° μν νμΈ λ° νλ³
def getFront(self):
"""
:rtype: int
맨 μμ κ° λ°ν
"""
return self.head.right.val if self.length else -1
def getRear(self):
"""
:rtype: int
맨 λ€ κ° λ°ν
"""
return self.tail.left.val if self.length else -1
def isEmpty(self):
"""
:rtype: bool
λ°ν¬ μλ£κ΅¬μ‘°μ κ°μ΄ λΉμ΄ μλμ§ νλ³
"""
return self.length == 0
def isFull(self):
"""
:rtype: bool
λ°ν¬ μλ£κ΅¬μ‘°μ κ°μ΄ κ°λ μ°¨ μλμ§ νλ³
"""
return self.length == self.maxlen
'AI > Python' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
μλ² μλ¬ λ‘κ·Έ μ²λ¦¬λ₯Ό μν Flask Error Handler μΈν (0) | 2023.01.11 |
---|---|
[μλ£κ΅¬μ‘°/ν] μν ν(Queue) λμμΈ (0) | 2023.01.05 |
[μλ£κ΅¬μ‘°/μ€ν,ν] μ€νμ μ΄μ©ν ν ꡬν (0) | 2023.01.04 |
[μλ£κ΅¬μ‘°/μ€ν] νλ₯Ό μ΄μ©ν μ€ν ꡬν (0) | 2023.01.03 |
[μλ£κ΅¬μ‘°/μ€ν] μΌμΌ μ¨λ (0) | 2022.12.29 |