[ λ¬Έμ λ§ν¬ ]
https://www.acmicpc.net/problem/11286
π© 쑰건
- μ°μ°μ κ°μ N(1≤N≤100,000)μ΄ μ£Όμ΄μ§λ©΄, λ€μ Nκ°μ μ€μ μ°μ°μ λν μ 보λ₯Ό λνλ΄λ μ μ xκ° μ£Όμ΄μ§.
- xκ° 0μ΄ μλλΌλ©΄ λ°°μ΄μ xλΌλ κ°μ λ£λ μ°μ°μ
- xκ° 0μ΄λΌλ©΄ λ°°μ΄μμ μ λκ°μ΄ κ°μ₯ μμ κ°μ μΆλ ₯νκ³ κ·Έ κ°μ λ°°μ΄μμ μ κ±°νλ μ°μ°μ
- μ λ ₯λλ xλ -2^31λ³΄λ€ ν¬κ³ , 2^31λ³΄λ€ μμ
- μ λ ₯μμ 0μ΄ μ£Όμ΄μ§ νμλ§νΌ λ΅μ μΆλ ₯ν΄λΌ. λ°°μ΄μ΄ λΉμ΄μλλ° 0μ΄ μ λ ₯λλ©΄ 0μ μΆλ ₯ν΄λΌ.
π© μ κ·Ό
μ°μ μμ νλ₯Ό μ¬μ©νκ³ μ λκ°μ μ°μ μμλ‘ λλ©΄ λμ§ μμκΉ?
π© μνμ°©μ€
- μ°μ μμ ν ꡬν
μ°μ μμ νλ νμ΄λΌλ μλ£κ΅¬μ‘°λ₯Ό ν΅ν΄ ꡬνν μ μλ€.
νμ μμ μ΄μ§ νΈλ¦¬ λͺ¨μμ κ°μ§λ©°, λΆλͺ¨ λ Έλμ κ°μ΄ νμ μμ λ Έλλ€μ κ°λ³΄λ€ ν¬κ±°λ(=>max heap) μλ€(=>min heap). λ°λΌμ νμ 루νΈλ Έλμ μ°μ μμκ° κ°μ₯ λμ λ°μ΄ν°λ₯Ό μμΉμν¨λ€. ν μλ£κ΅¬μ‘°λ μ°μ μμ νλ₯Ό ꡬννκ±°λ, ν μ λ ¬μ νλ λ° μ¬μ©λλ€.
β μ μ°μ μμ νλ λ°°μ΄μ΄λ μ°κ²°λ¦¬μ€νΈκ° μλ, νμΌλ‘ ꡬνν κΉ?
- λ°°μ΄λ‘ ꡬννλ€λ©΄
- μ°μ μμκ° μ€κ°μΈ κ²μ΄ λ€μ΄κ°μΌ ν λ, λ€μ λ°μ΄ν° λͺ¨λ ν μΉΈμ© λ€λ‘ λ°μ΄μΌ ν¨. μ΅μ μ κ²½μ° λͺ¨λ λ°μ΄ν°λ₯Ό λ€λ‘ λ°μ΄μΌ ν¨.
- λ°λΌμ μμ : O(1), μ½μ : O(n)
- μ°κ²°λ¦¬μ€νΈλ‘ ꡬννλ€λ©΄
- μ°μ μμκ° μ€κ°μΈ κ²μ΄ λ€μ΄κ°μΌ ν λ, κ·Έ μμΉλ₯Ό μ°ΎμμΌ ν¨. μ΅μ μ κ²½μ° λ§¨ λκΉμ§ νμν΄μΌ ν¨.
- λ°λΌμ μμ : O(1), μ½μ : O(n)
- νμΌλ‘ ꡬννλ€λ©΄
- μ½μ : 맨 λ μμΉμ λ£κ³ μ΅μ/μ΅λ νμ 쑰건 μλ°°λλ©΄ λ λ Έλμ μ리 λ°κΏλκ°
- μμ : μΌλ¨ νΈλ¦¬ ꡬ쑰 μμμ κ°μ₯ λ§μ§λ§ μμΉμΈ κ°κ³Ό 루νΈλ₯Ό λ°κΏμ 루νΈλ₯Ό μμ νκ² μ κ±°, μ΄ν νμ μ±μ§μ΄ μ λ§μ‘±λ μ μκ² λ΄λΆμ μΌλ‘ μμΉλ₯Ό λ°κΏ
- λ°λΌμ μμ : O(log2n), μ½μ : O(log2n)
- μ°Έκ³ λ‘ "ν"μ ꡬνν μμλ λ°°μ΄μ μ¬μ©νλ κ² μ’μ
pythonμμ μ°μ μμ νλ PriorityQueue classλ‘ μ 곡λκ³ , μ΄λ λ΄λΆμ μΌλ‘ heapq λͺ¨λμ ν΅ν΄ ꡬνλμ΄ μλ€. λ°λΌμ PriorityQueue, heapq λ μ€ μ무거λ μ¬μ©ν΄λ λλ€. (gpt νΌμ λ‘ λ¨μΌ μ€λ λ νκ²½μμλ heapq, λ©ν° μ€λ λ νκ²½μμλ PriorityQueueλ₯Ό μ¬μ©νλ κ±Έ κΆμ₯νλ€κ³ ν¨)
from queue import PriorityQueue
# μμ± (defaultλ μ΅μ ν(=μ€λ¦μ°¨μ μ λ ¬))
pq = PriorityQueue()
# xλΌλ μμ μ½μ
pq.put(x)
# μμ μμ ν 리ν΄
pq.get()
## μ΅λ ν ꡬννλ €λ©΄
## μ°μ μμλ₯Ό μμλ‘ λ³ννμ¬ μ½μ
## pq.put(-x)
## λ¦¬ν΄ κ° μ¬μ© μ λ€μ μμλ‘ λ³ν
## print(-pq.get())
import heapq
# μμ± (defaultλ μ΅μ ν(=μ€λ¦μ°¨μ μ λ ¬))
hq = []
# μμ μ½μ
(heapμ ννλ₯Ό μ μ§νλ©΄μ hqμ xλΌλ μμλ₯Ό push)
heapq.heappush(hq, x)
# μμ μμ ν λ¦¬ν΄ (heapμ ννλ₯Ό μ μ§νλ©΄μ hqμμ λ£¨νΈ λ
Έλλ₯Ό λ°ν)
heapq.heappop(heap)
# 리μ€νΈλ₯Ό μ ν μκ°λ΄μ heapμΌλ‘ λ³ν
arr = [4, 3, 1, 2]
print(arr) # [4, 3, 1, 2]
heapq.heapify(arr)
print(arr) # [1, 2, 4, 3]
## μ΅λ ν ꡬννλ €λ©΄
## μ°μ μμλ₯Ό μμλ‘ λ³ννμ¬ μ½μ
## heapq.heappush(hq, -x)
## λ¦¬ν΄ κ° μ¬μ© μ λ€μ μμλ‘ λ³ν
## print(-heapq.heappop(hq))
- μκ°μ΄κ³Ό
pythonμΌλ‘ λ¬Έμ λ₯Ό ν λ 맨 μ²«μ€ test case κ°μλ₯Ό μ λ ₯λ°λ 건 input()μ μ¬μ©ν΄λ 무방νλ, λ°λ³΅λ¬ΈμΌλ‘ μ¬λ¬ μ€ μ λ ₯λ°λ μν©μμλ λ°λμ sys.stdin.readline()μ μ¬μ©ν΄μΌ μκ°μ΄κ³Όκ° λ°μνμ§ μλλ€!
π» μ½λ (Python3)
import heapq
import sys
N = int(input())
heap = [] # μ΅μν, κ° μμ : (μ λκ°, μ€μ κ°κ°)
for _ in range(N):
x = int(sys.stdin.readline())
if x==0:
if not heap:
print(0)
else:
min_abs = heapq.heappop(heap)
print(min_abs[1])
else:
heapq.heappush(heap, (abs(x),x))
μ°Έκ³ )
μλ£κ΅¬μ‘° - μ°μ μμ ν(Priority Queue)μ ν(heap)
μ»΄ν¨ν°/IT/μκ³ λ¦¬μ¦ μ 리 λΈλ‘κ·Έ
chanhuiseok.github.io
heapq — Heap queue algorithm
Source code: Lib/heapq.py This module provides an implementation of the heap queue algorithm, also known as the priority queue algorithm. Heaps are binary trees for which every parent node has a va...
docs.python.org
[Python] heapqλ₯Ό μ΄μ©ν μ΅μ ν, μ΅λ ν
heapqλ₯Ό μ΄μ©ν μ΅μ νκ³Ό μ΅λ ν ꡬν
velog.io
'π» Algorithms > λ°±μ€' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[λ°±μ€] 1676 ν©ν λ¦¬μΌ 0μ κ°μ - μν, μ μλ‘ (1) | 2024.09.16 |
---|---|
[λ°±μ€] 1929 μμ ꡬνκΈ° - μλΌν μ€ν λ€μ€μ 체 (0) | 2024.09.15 |
[λ°±μ€] 12865 νλ²ν λ°°λ - λ€μ΄λλ―Ή νλ‘κ·Έλλ° (0) | 2024.09.01 |
[λ°±μ€] 10844 μ¬μ΄ κ³λ¨ μ - λ€μ΄λλ―Ή νλ‘κ·Έλλ° (0) | 2024.09.01 |
[λ°±μ€] 11727 2xn νμΌλ§2 - λ€μ΄λλ―Ή νλ‘κ·Έλλ° (0) | 2024.08.31 |