JUNGLE 240326 (W01)
KRAFTON JUNGLE Week 01 (λ΄ μμΌ!!!π€)
1. Keywords
μ°μ μμ ν (Priority Queue)
- νμ κ° μμμ μ°μ μμκ° μ§μ λ μλ£ κ΅¬μ‘°
- μΌλ°μ μΌλ‘ κ°μ₯ λμ μ°μ μμλ₯Ό κ°μ§ μμκ° λ¨Όμ μ²λ¦¬λλ μλ£ κ΅¬μ‘°
- ν(heap) μλ£ κ΅¬μ‘°λ₯Ό μ¬μ©νμ¬ κ΅¬νν μ μμ
class PriorityQueue:
def __init__(self):
self.heap = []
def parent(self, i):
return (i - 1) // 2 # λΆλͺ¨ λ
Έλμ μΈλ±μ€
def left_child(self, i):
return 2 * i + 1 # μΌμͺ½ μμ λ
Έλμ μΈλ±μ€
def right_child(self, i):
return 2 * i + 2 # μ€λ₯Έμͺ½ μμ λ
Έλμ μΈλ±μ€
def swap(self, i, j):
self.heap[i], self.heap[j] = self.heap[j], self.heap[i]
__init__()
: μ°μ μμ ν κ°μ²΄λ₯Ό μ΄κΈ°νparent()
: μ£Όμ΄μ§ μΈλ±μ€i
μ λΆλͺ¨ λ Έλμ μΈλ±μ€λ₯Ό λ°νleft_child()
,right_child()
: μ£Όμ΄μ§ μΈλ±μ€i
μ μΌμͺ½, μ€λ₯Έμͺ½ μμ λ Έλμ μΈλ±μ€λ₯Ό λ°νswap()
: μ£Όμ΄μ§ μΈλ±μ€i
,j
μ κ°μ μλ‘ κ΅ν
def heapify_up(self, i):
while i > 0 and self.heap[self.parent(i)][0] > self.heap[i][0]:
self.swap(i, self.parent(i))
i = self.parent(i)
def heapify_down(self, i):
min_index = i
left = self.left_child(i)
right = self.right_child(i)
if left < len(self.heap) and self.heap[left][0] < self.heap[min_index][0]:
min_index = left
if right < len(self.heap) and self.heap[right][0] < self.heap[min_index][0]:
min_index = right
if i != min_index:
self.swap(i, min_index)
self.heapify_down(min_index)
heapify_up()
: μ£Όμ΄μ§ μΈλ±μ€i
λ₯Ό κΈ°μ€μΌλ‘ λΆλͺ¨ λ Έλμ λΉκ΅νμ¬ ν μμ±μ λ§μ‘±νλλ‘ μλ‘ μ¬λ €κ°λ©° μ‘°μ (μ½μ μ°μ° μ μ¬μ©)heapify_down()
: μ£Όμ΄μ§ μΈλ±μ€i
λ₯Ό κΈ°μ€μΌλ‘ μμ λ Έλμ λΉκ΅νμ¬ ν μμ±μ λ§μ‘±νλλ‘ μλλ‘ λ΄λ €κ°λ©° μ‘°μ (μμ μ°μ° μ μ¬μ©)
def insert(self, priority, value):
self.heap.append((priority, value))
self.heapify_up(len(self.heap) - 1)
def delete_min(self):
if len(self.heap) == 0:
return None
if len(self.heap) == 1:
return self.heap.pop()
min_value = self.heap[0]
self.heap[0] = self.heap.pop()
self.heapify_down(0)
return min_value
insert()
: μ£Όμ΄μ§ μ°μ μμpriority
μ κ°value
λ₯Ό κ°μ§ μμλ₯Ό μ°μ μμ νμ μ½μ- νμ μλ‘μ΄ μμκ° λ€μ΄ μ€λ©΄, μΌλ¨ μλ‘μ΄ λ Έλλ₯Ό νμ λ§μ§λ§ λ Έλμ μ½μ
- μ½μ
νμ
heapify_up
μ νΈμΆν΄ μλ‘μ΄ λ Έλλ₯Ό λΆλͺ¨ λ Έλλ€κ³Ό κ΅νν΄μ νμ μ±μ§μ μ μ§
delete_min()
: μ°μ μμκ° κ°μ₯ λμ μμλ₯Ό μ κ±°νκ³ λ°ν- μ΅λ νμμμ μμ λ κ°μ₯ ν° ν€κ°μ κ°μ§ λ Έλλ₯Ό μμ νλ κ² (λ£¨νΈ λ Έλ μμ )
- λ§μ§λ§ λ Έλλ₯Ό λ£¨νΈ λ Έλλ‘ μ΄λμν¨ ν 루νΈμμλΆν° λ¨λ§ λ ΈλκΉμ§μ κ²½λ‘μ μλ λ Έλλ€μ κ΅ν
- μ¦,
heapify_down
μ νΈμΆν΄ νμ μ±μ§μ μ μ§