μ°μ μμ νλ?
μ°μ μμ νλ λ¨Όμ λ€μ΄μ¨ λ°μ΄ν°κ° λ¨Όμ μ²λ¦¬λλ μΌλ°μ μΈ νμ λ¬λ¦¬, μ°μ μμκ° λμ λ°μ΄ν°λΆν° μ²λ¦¬λλ μλ£κ΅¬μ‘°μ΄λ€. λ°°μ΄, μ°κ²°λ¦¬μ€νΈ, ν(Heap)μΌλ‘ λͺ¨λ ꡬνν μ μμ§λ§ μΌλ°μ μΌλ‘λ μκ°λ³΅μ‘λκ° μ μ ν(Heap)μ μ¬μ©νλ€.
ν(Heap)
μ΅μκ°, μ΅λκ°μ μ°Ύμλ΄λ μ°μ°μ λΉ λ₯΄κ²νκΈ° μν΄ κ³ μλ μμ μ΄μ§ νΈλ¦¬μ μΌμ’ μΈ μλ£κ΅¬μ‘°μ΄λ€. νμ μ΅μ νκ³Ό μ΅λ νμΌλ‘ ꡬλΆν μ μλ€.
- μ΅μ ν: 루νΈλ Έλκ° κ°μ₯ μμ κ°μ κ°μ§λ©°, νμ λΆλͺ¨λ Έλλ μμλ Έλλ³΄λ€ μμ κ°μ κ°μ§
- μ΅λ ν: 루νΈλ Έλκ° κ°μ₯ ν° κ°μ κ°μ§λ©°, νμ λΆλͺ¨λ Έλλ μμλ Έλλ³΄λ€ ν° κ°μ κ°μ§
μ°μ μμ ν ꡬν (νμ΄μ¬)
- PriorityQueue
from queue import PriorityQueue
pq = PriorityQueue()
pq.put(1)
pq.put(3)
pq.put(2)
pq.get() # 1
pq.get() # 2
pq.get() # 3
- heapq
import heapq
pq = []
heapq.heappush(pq, 1)
heapq.heappush(pq, 3)
heapq.heappush(pq, 2)
heapq.heappop(pq) # 1
heapq.heappop(pq) # 2
heapq.heappop(pq) # 3
νμ΄μ¬ μ°μ μμ ν ꡬνμμ heapqκ° PriorityQueueλ³΄λ€ μ€νμκ°μ΄ μ κ² κ±Έλ € heapqλ₯Ό μΌλ°μ μΌλ‘ λ§μ΄ μ¬μ©νλ€. λ, PriorityQueueμ heapqλ μ΅μ νλ§ λ€λ£° μ μκΈ° λλ¬Έμ ν° μλΆν° pop νκ³ μΆμ λλ - λΆνΈλ₯Ό λΆν pushνλ©΄ λλ€.
heappush()μ heappop() λͺ¨λ O(logN)μ μκ°λ³΅μ‘λλ₯Ό κ°λλ€.