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μ νΈμΆν΄ νμ μ±μ§μ μ μ§