DFS(Depth-First Search, κΉμ΄ μ°μ νμ)λ κ·Έλνλ νΈλ¦¬μ λͺ¨λ λ Έλλ₯Ό νμν λ μ¬μ©νλ μκ³ λ¦¬μ¦μ λλ€. DFSλ ν κ²½λ‘λ‘ μ΅λν κΉμ΄ νμν ν, λ μ΄μ κ° κ³³μ΄ μμΌλ©΄ μ΄μ μ μ μΌλ‘ λμκ° λ€λ₯Έ κ²½λ‘λ₯Ό νμνλ λ°©μμΌλ‘ μλν©λλ€.
- μ€ν(Stack) μλ£ κ΅¬μ‘°λ₯Ό κΈ°λ°μΌλ‘ λμν©λλ€. μ΄λ₯Ό ꡬνν λ μ€μ μ€νμ μ¬μ©ν μλ μμ§λ§, μ¬κ· νΈμΆ μ λ΄λΆμ μΌλ‘ μ€νμ΄ μ¬μ©λ©λλ€.
- κ·Έλν λλ νΈλ¦¬μ λͺ¨λ λ Έλλ₯Ό λ°©λ¬Ένλλ° μ ν©ν©λλ€.
- κΉμ΄λ₯Ό μ°μ μ μΌλ‘ νμνλ―λ‘ νΉμ κ²½λ‘μ λκΉμ§ λλ¬ν ν, κ·Έ κ²½λ‘κ° μλ£λλ©΄ λ€μ λμκ°μ λ€λ₯Έ κ²½λ‘λ₯Ό νμν©λλ€.
- λ°©λ¬Έν λ Έλλ₯Ό κΈ°μ΅νλ λ°©λ¬Έ λ°°μ΄(visited)μ μ¬μ©νμ¬ ν λ² λ°©λ¬Έν λ Έλλ₯Ό λ€μ λ°©λ¬Ένμ§ μλλ‘ λ°©μ§ν©λλ€.
- μ¬κ· λ°©μ
- μ¬κ· νΈμΆμ ν΅ν΄ μ€νμ μν μ λμ νλ©°, νμ΄μ¬μ ν¨μ νΈμΆ μ€νμ μ¬μ©ν©λλ€.
βΌοΈ μ€μβΌοΈ νμ§λ§ μ¬κ· κΉμ΄κ° κΉμ΄μ§ κ²½μ° μ€ν μ€λ²νλ‘μ°κ° λ°μν μ μμ΅λλ€. λ°λΌμ νμ κΉμ΄κ° κΉμ΄μ§λ©΄ sys.setrecursionlimit()μ μ¬μ©νμ¬ μ¬κ· νλλ₯Ό λ리기λ ν©λλ€.- μ½λλ κ°κ²°νμ§λ§, ν° κ·Έλνλ κΉμ νμμμλ μνν μ μμ΅λλ€.
- μ€ν λ°©μ
- λͺ μμ μΈ μ€ν μλ£ κ΅¬μ‘°λ₯Ό μ¬μ©νμ¬ μ€ν μ€λ²νλ‘μ° λ¬Έμ λ₯Ό ν΄κ²°ν©λλ€.
- μ¬κ· νΈμΆ μμ΄λ ꡬν κ°λ₯νλ©°, λ©λͺ¨λ¦¬ κ΄λ¦¬μ μμ΄μ μ’ λ ν¨μ¨μ μΌ μ μμ΅λλ€.
- μ½λκ° μ‘°κΈ λ 볡μ‘ν΄μ§ μ μμ§λ§, μ¬κ·λ₯Ό νΌν μ μλ μ₯μ μ΄ μμ΅λλ€.
βοΈ νμ© μμ (μ¬κ·) λ¬Έμ : μ κΈ°λ λ°°μΆ
direction = [(0, -1), (0, 1), (-1, 0), (1, 0)] # μ’μ° μν
m, n, k = 10, 8, 17 # λμ₯μ (κ°λ‘, μΈλ‘, λ°°μΆ κ°―μ)
farm = [
[1, 1, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 1, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 1, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 1, 0, 0, 0, 0, 0],
[0, 0, 1, 1, 0, 0, 0, 1, 1, 1],
[0, 0, 0, 0, 1, 0, 0, 1, 1, 1],
[0, 0, 0, 0, 0, 0, 0, 1, 1, 1],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
]
visited = [[False] * m for _ in range(n)]
answer = 0
def dfs(x, y, farm, visited):
visited[y][x] = True
for dy, dx in direction:
nx, ny = dx + x, dy + y
if 0 <= nx < m and 0 <= ny < n:
if farm[ny][nx] == 1 and not visited[ny][nx]:
dfs(nx, ny, farm, visited)
for y in range(n):
for x in range(m):
if not visited[y][x] and farm[y][x] == 1:
dfs(x, y, farm, visited)
answer += 1
print(answer) # 5βοΈ νμ© μμ (μ€ν) λ¬Έμ : μ κΈ°λ λ°°μΆ
direction = [(0, -1), (0, 1), (-1, 0), (1, 0)] # μ’μ° μν
m, n, k = 10, 8, 17 # λμ₯μ (κ°λ‘, μΈλ‘, λ°°μΆ κ°―μ)
farm = [
[1, 1, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 1, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 1, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 1, 0, 0, 0, 0, 0],
[0, 0, 1, 1, 0, 0, 0, 1, 1, 1],
[0, 0, 0, 0, 1, 0, 0, 1, 1, 1],
[0, 0, 0, 0, 0, 0, 0, 1, 1, 1],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
]
visited = [[False] * m for _ in range(n)]
answer = 0
def dfs(x, y):
stack = [(x, y)]
visited[y][x] = True
while stack:
cx, cy = stack.pop()
for dy, dx in direction:
nx, ny = dx + cx, dy + cy
if 0 <= nx < m and 0 <= ny < n:
if not visited[ny][nx] and farm[ny][nx] == 1:
visited[ny][nx] = True
stack.append((nx, ny))
for y in range(n):
for x in range(m):
if not visited[y][x] and farm[y][x] == 1:
dfs(x, y)
answer += 1
print(answer) # 5BFS(Breadth-First Search)λ κ·Έλν λλ νΈλ¦¬μμμ νμ μκ³ λ¦¬μ¦ μ€ νλλ‘, λλΉ μ°μ νμ λ°©λ²μ μ¬μ©ν©λλ€. BFSλ λ¨Όμ μμ λ Έλμμ κ°κΉμ΄ λ Έλλ₯Ό νμν ν μ μ°¨ λ©λ¦¬ μλ λ Έλλ‘ μ΄λν©λλ€. μ΄λ₯Ό μν΄ ν(Queue)λ₯Ό μ¬μ©νμ¬ νμ¬ νμ μ€μΈ λ Έλμ μ΄μμ μ°¨λ‘λλ‘ μ μ₯νκ³ νμν©λλ€.
- μ΅λ¨ κ²½λ‘ νμ: BFSλ κ°μ€μΉκ° μλ κ·Έλνμμ λ λ Έλ κ°μ μ΅λ¨ κ²½λ‘λ₯Ό 보μ₯ν©λλ€.
- FIFO ν μ¬μ©: λ°©λ¬Έν λ Έλλ₯Ό νμ μ μ₯νκ³ , λ¨Όμ λ€μ΄μ¨ λ Έλλ₯Ό λ¨Όμ νμν©λλ€.
- μμ λ Έλλ₯Ό νμ μ½μ ν©λλ€.
- νμμ λ Έλλ₯Ό νλ κΊΌλ΄κ³ ν΄λΉ λ Έλλ₯Ό λ°©λ¬Έν©λλ€.
- λ°©λ¬Έν λ Έλμ μ°κ²°λ μΈμ λ Έλλ₯Ό λͺ¨λ νμ μ½μ ν©λλ€.
- νκ° λΉ λκΉμ§ μ΄ κ³Όμ μ λ°λ³΅ν©λλ€.
βοΈ νμ© μμ λ¬Έμ : μ¨λ°κΌμ§
from collections import deque
# νμ¬ μμΉ, λͺ©ν λλ¬ μμΉ
N, K = 5, 17
visited = [False] * 100001
visited[N] = True
def bfs():
q = deque([(N, 0)])
while q:
n, sec = q.popleft()
if n == K:
# λͺ©ν λλ¬μ μΆλ ₯ ν μ’
λ£
print(sec)
break
# νμ¬ μμΉμμ (-1, +1, *2) 3κ°μ§ κ°λ₯μ±μ΄ μλ μΌμ΄μ€λ₯Ό κ³μ°νλ€.
for next in (n - 1, n + 1, n * 2):
# λ°©λ¬Έμ²λ¦¬μ μ¬λ°©λ¬Έ λ°©μ§
if 0 <= next <= 100000 and not visited[next]:
visited[next] = True
q.append((next, sec + 1))
bfs()DFSλ νλμ κ²½λ‘λ₯Ό λκΉμ§ νμν ν λ€μ λμμμ λ€λ₯Έ κ²½λ‘λ₯Ό νμν©λλ€. μ¦, κΉμ΄ μ°μ μΌλ‘ νμμ μ§νν©λλ€. μ΄λ₯Ό μν΄ μ€ν(Stack) μλ£ κ΅¬μ‘°λ μ¬κ· ν¨μ νΈμΆμ μ¬μ©ν©λλ€. λ¨Όμ κΉμ΄(depth)λ₯Ό μ°μ μΌλ‘ νμνλ―λ‘, ν λ Έλμμ κ° μ μλ κ²½λ‘λ₯Ό λͺ¨λ νμν λ€μμΌ λ€λ₯Έ κ²½λ‘λ‘ λμμ΅λλ€.
BFSλ λ¨Όμ μμ λ Έλμμ κ°κΉμ΄ λ Έλλ₯Ό νμνκ³ , κ·Έ λ€μμΌλ‘ λ©λ¦¬ μλ λ Έλλ₯Ό νμν©λλ€. μ¦, λλΉ μ°μ μΌλ‘ νμμ μ§νν©λλ€. μ΄λ₯Ό μν΄ ν(Queue) μλ£ κ΅¬μ‘°λ₯Ό μ¬μ©ν©λλ€. λ¨Όμ λμΌν λ 벨(level)μ λͺ¨λ λ Έλλ₯Ό νμν ν, λ€μ λ λ²¨λ‘ μ΄λν©λλ€.
DFSλ μ£Όλ‘ μ€ν(μ¬κ· νΈμΆ μ μμ€ν
μ€ν)μ μ¬μ©νμ¬ κ°μ₯ μ΅κ·Όμ λ°©λ¬Έν λ
Έλλ₯Ό κΈ°μ€μΌλ‘ λ€μ νμμ μ§νν©λλ€.
BFSλ μ£Όλ‘ νλ₯Ό μ¬μ©νμ¬ λ¨Όμ λ€μ΄μ¨ λ
ΈλλΆν° μ°¨λ‘λ‘ νμν©λλ€.
-
DFS μ¬μ© μμ
- κ²½λ‘ νμ: νΉμ λ Έλμμ νΉμ λ Έλλ‘ κ°λ κ²½λ‘λ₯Ό μ°Ύκ±°λ, λ―Έλ‘ νμ λ±μ λ¬Έμ μ μ ν©ν©λλ€.
- λ°±νΈλνΉ: κ°λ₯ν λͺ¨λ κ²½μ°λ₯Ό μλν΄μΌ ν λ μ¬μ©λ©λλ€. μλ₯Ό λ€μ΄, νΌμ¦ λ¬Έμ , μ‘°ν©/μμ΄ λ¬Έμ λ±μμ DFSκ° μ μ©ν©λλ€.
- μ¬μ΄ν΄ νμ§: DFSλ κ·Έλνμμ μ¬μ΄ν΄μ΄ μ‘΄μ¬νλμ§λ₯Ό νμΈνλ λ° μ ν©ν©λλ€.
-
BFS μ¬μ© μμ
- μ΅λ¨ κ²½λ‘ νμ: κ°μ€μΉκ° μλ κ·Έλνμμ λ λ Έλ κ°μ μ΅λ¨ κ²½λ‘λ₯Ό μ°Ύλ λ° μ ν©ν©λλ€.
- κ³μΈ΅ νμ: ν λ λ²¨μ© μμ°¨μ μΌλ‘ νμν΄μΌ νλ λ¬Έμ μ μ μ©ν©λλ€. μλ₯Ό λ€μ΄, μμ λ€νΈμν¬μμ μΉκ΅¬ κ΄κ³λ₯Ό νμν λ κ°μ λ 벨μ μ¬λλ€λΆν° μ°¨λ‘λ‘ νμνλ κ²μ΄ μ 리ν©λλ€.
- λ 벨 νμ: νΈλ¦¬μ κ° λ 벨μμ λ Έλλ₯Ό μμ°¨μ μΌλ‘ νμνλ κ²½μ° BFSκ° μ ν©ν©λλ€.
λμ νλ‘κ·Έλλ°μ 볡μ‘ν λ¬Έμ λ₯Ό λ κ°λ¨ν νμ λ¬Έμ λ‘ λλμ΄ ν΄κ²°νλ μκ³ λ¦¬μ¦ μ€κ³ κΈ°λ²μ λλ€. μ΄ κΈ°λ²μ μ΅μ ν λ¬Έμ λ₯Ό ν΄κ²°νκΈ° μν΄ μ¬μ©λλ©°, μ£Όμ΄μ§ λ¬Έμ λ₯Ό μ μ μλ νμ λ¬Έμ λ‘ λλκ³ , μ΄ νμ λ¬Έμ μ κ²°κ³Όλ₯Ό μ μ₯νμ¬ μ€λ³΅ κ³μ°μ νΌνλ λ°©μμΌλ‘ μλν©λλ€. DPλ μ£Όλ‘ μ΅μ ν λ¬Έμ , κ²½λ‘ νμ λ¬Έμ λ° μ‘°ν© λ¬Έμ μ μ μ©λ©λλ€.
- μ΅μ λΆλΆ ꡬ쑰: λ¬Έμ μ μ΅μ ν΄κ²°μ± μ΄ νμ λ¬Έμ μ μ΅μ ν΄κ²°μ± μΌλ‘ ꡬμ±λ μ μμ΅λλ€. μ¦, ν° λ¬Έμ λ₯Ό ν΄κ²°νκΈ° μν΄ μμ λ¬Έμ λ₯Ό ν΄κ²°νκ³ κ·Έ κ²°κ³Όλ₯Ό κ²°ν©νμ¬ μ΅μ ν΄λ₯Ό λμΆν©λλ€.
- μ€λ³΅ νμ λ¬Έμ : λμΌν νμ λ¬Έμ κ° μ¬λ¬ λ² λ°μν©λλ€. μ΄λ₯Ό λ©λͺ¨μ΄μ μ΄μ λλ ν μ΄λΈμ μ¬μ©νμ¬ ν΄κ²°ν¨μΌλ‘μ¨ ν¨μ¨μ±μ λμ λλ€.
- λ©λͺ¨μ΄μ μ΄μ : κ³μ°ν κ²°κ³Όλ₯Ό μ μ₯νμ¬ λμΌν κ³μ°μ λ°λ³΅νμ§ μλλ‘ ν©λλ€. μ¬κ·μ λ°©λ²κ³Ό ν¨κ» μ¬μ©λλ κ²½μ°κ° λ§μ΅λλ€.
- νλ€μ΄ λλ λ°ν μ μ κ·Ό: DPλ νμ λ¬Έμ λ₯Ό ν΄κ²°νλ μμμ λ°λΌ λ κ°μ§ μ κ·Ό λ°©μμΌλ‘ λλ©λλ€.
- νλ€μ΄: μ¬κ·μ μΌλ‘ λ¬Έμ λ₯Ό ν΄κ²°νκ³ , μ΄λ―Έ κ³μ°λ κ²°κ³Όλ₯Ό μ μ₯νμ¬ νμν λ μ¬μ¬μ©ν©λλ€.
- λ°ν μ : κ°μ₯ μμ νμ λ¬Έμ λΆν° μ°¨κ·Όμ°¨κ·Ό ν΄κ²°ν΄ λκ°λ©΄μ ν° λ¬Έμ μ ν΄κ²°μ± μ λ§λ€μ΄ λκ°λλ€.
- νΌλ³΄λμΉ μμ΄: nλ²μ§Έ νμ κ³μ°νλ λ¬Έμ λ₯Ό DPλ‘ ν΄κ²°ν μ μμ΅λλ€. κ° νμ μ΄μ λ νμ ν©μΌλ‘ μ μλλ©°, μ€λ³΅ κ³μ°μ νΌνκΈ° μν΄ μ΄λ―Έ κ³μ°λ κ°μ μ μ₯ν©λλ€.
- 0-1 λ°°λ λ¬Έμ : μ£Όμ΄μ§ 물건λ€μ κ°μΉμ 무κ²λ₯Ό κΈ°λ°μΌλ‘ μ΅λ κ°μΉλ₯Ό μ»κΈ° μν΄ μ νλ μ©λμ λ°°λμ μ΄λ€ 물건μ λ΄μμΌ νλμ§λ₯Ό κ²°μ νλ λ¬Έμ μ λλ€. DPλ₯Ό μ¬μ©νμ¬ κ° λ¬Όκ±΄μ ν¬ν¨νκ±°λ ν¬ν¨νμ§ μμ κ²½μ°μ μ΅λ κ°μΉλ₯Ό κ³μ°ν©λλ€.
- RGB 거리 λ¬Έμ : μ΄ λ¬Έμ λ Nκ°μ μ§μ λΉ¨κ°, μ΄λ‘, νλμΌλ‘ μμΉ ν λμ μ΅μ λΉμ©μ κ³μ°ν©λλ€. κ° μ§μ μΈμ ν μ§κ³Ό κ°μ μμΌλ‘ μΉ ν μ μλ μ μ½μ΄ μμΌλ©°, DPλ₯Ό ν΅ν΄ κ° μ§μ μμΉ λΉμ©μ μ΅μνν©λλ€.
μ΄λΆ κ·Έλνμμ λ κ°μ λ 립λ μ§ν© μ¬μ΄μμ κ°λ₯ν μ΅λ λ§€μΉμ μ°Ύλ λ¬Έμ μ λλ€. μ΄λΆ κ·Έλνλ λ κ°μ μ§ν©μΌλ‘ μ μ λ€μ΄ λλμ΄ μμΌλ©°, κ° κ°μ μ μλ‘ λ€λ₯Έ μ§ν©μ μ μ μ¬μ΄μμλ§ μ°κ²°λ©λλ€.
- λ§€μΉ(Matching): μ΄λΆ λ§€μΉμμ "λ§€μΉ"μ κ°μ μ λΆλΆμ§ν©μΌλ‘, κ° μ μ μ΄ μ΅λ νλμ κ°μ μλ§ ν¬ν¨λλλ‘ μ νλ©λλ€. μ¦, κ° μ μ μ΄ ν λ²λ§ λ§€μΉμ μ°Έμ¬ν μ μμ΅λλ€.
- μ΅λ λ§€μΉ(Maximum Matching): κ°λ₯ν ν μ΅λν λ§μ κ°μ μ μ ννμ¬ λ§€μΉμ ꡬμ±νλ κ²μ λ§ν©λλ€. μ΅λ λ§€μΉμ ꡬνλ κ²μ΄ μ΄λΆ λ§€μΉ λ¬Έμ μ ν΅μ¬μ λλ€.
- DFSμ BFSμ νμ©: μ΄λΆ λ§€μΉμ ν΄κ²°νλ μΌλ°μ μΈ λ°©μμ κΉμ΄ μ°μ νμ(DFS)μ μ¬μ©ν΄ κ΅ν κ²½λ‘λ₯Ό νμνλ κ²μ λλ€. κ²½μ°μ λ°λΌ BFS(λλΉ μ°μ νμ)λ 보쑰μ μΌλ‘ μ¬μ©λ©λλ€.
- ꡬμΈ/κ΅¬μ§ λ§€μΉ: λ μ§ν© μ€ νλλ₯Ό ꡬμ§μ, λ€λ₯Έ νλλ₯Ό μΌμλ¦¬λ‘ μ€μ νμ¬ κ°κ°μ ꡬμ§μμ μΌμλ¦¬κ° μ°κ²°λ κ²½μ°, κ°λ₯ν μ΅μ μ λ§€μΉμ μ°Ύμ μ μμ΅λλ€.
- μμ ν λΉ λ¬Έμ : μμ μ μνν μ μλ κΈ°κ³λ μ¬λκ³Ό κ° μμ κ°μ μ΅μ ν λΉμ μ°Ύλ λ° μ¬μ©λ©λλ€.
- λν μ μ, νν° κ΅¬μ±: νμ-μ 곡 λ§€μΉ, νν°λ κ·Έλ£Ήμ ꡬμ±νλ λ±μ λ¬Έμ μλ μ΄λΆ λ§€μΉ μκ³ λ¦¬μ¦μ΄ μ¬μ©λ©λλ€.
βοΈ μμ μ΄νκ°νΈ
import sys
sys.setrecursionlimit(100000)
# μμ
μ, μμ
N, M = map(int, input().split())
tasks = {}
assigned = [None] * (M + 1) # λ§€μΉ μνλ₯Ό κΈ°λ‘
for i in range(1, N + 1):
line = list(map(int, input().split()))
tasks[i] = line[1:]
# λ§€μΉμ μν
def assign(staff, visited):
for task in tasks[staff]:
if visited[task]:
continue
visited[task] = True
# μμ
μκ° ν λΉλμ΄ μμ§ μκ±°λ μ΄λ―Έ ν λΉλμ΄μλ€λ©΄ ν΄λΉ μμ
μκ° λ€λ₯Έ μμ
μΌλ‘ μ보ν μ μλμ§ νμΈνλ€.
if assigned[task] is None or assign(assigned[task], visited):
assigned[task] = staff
return True
return False
for i in range(1, N + 1):
# μμ
μλ₯Ό μνν λ λ§λ€ μμ
visitedλ₯Ό μ΄κΈ°ννλ€.
visited = [False] * (M + 1)
assign(i, visited)
print(sum(1 for a in assigned if a != None))dequeλ Pythonμ collections λͺ¨λμμ μ 곡νλ μλ°©ν₯ νλ‘, 리μ€νΈμ μ μ¬νμ§λ§ μμͺ½ λμμ λΉ λ₯΄κ³ ν¨μ¨μ μΌλ‘ μμλ₯Ό μΆκ°νκ±°λ μ κ±°ν μ μλ μλ£ κ΅¬μ‘°μ λλ€. dequeλ Double-Ended Queueμ μ½μλ‘, νμ μμͺ½ λμμ μμλ₯Ό μΆκ°νκ±°λ μ κ±°νλ μμ μ O(1) μκ° μμ μνν μ μμ΄, 리μ€νΈλ³΄λ€ ν¨μ¨μ μ λλ€.
- μλ°©ν₯μΌλ‘ μ½μ κ³Ό μμ κ° κ°λ₯ν©λλ€.
- μμͺ½μμ μΆκ°/μμ , λ€μͺ½μμ μΆκ°/μμ λͺ¨λ μ§μν©λλ€.
- 리μ€νΈλ μμͺ½ λμμ μμλ₯Ό μΆκ°νκ±°λ μμ νλ λ° O(n) μκ°μ΄ 걸릴 μ μμ§λ§, dequeλ O(1)μ μκ° λ³΅μ‘λλ₯Ό 보μ₯ν©λλ€.
- ν, μ€ν, λ± λ± λ€μν λ°©μμΌλ‘ νμ© κ°λ₯ν©λλ€.
from collections import deque
l = [1,2,3,4]
dq = deque(l) # deque([1, 2, 3, 4])
dq.append(5) # deque([1, 2, 3, 4, 5])
dq.appendleft(6) # deque([6, 1, 2, 3, 4, 5])
first = dq.popleft() # 6
last = dq.pop() # 5
print(dq) # deque([1, 2, 3, 4])heapqλ Pythonμμ ν ν(μ°μ μμ ν)λ₯Ό ν¨μ¨μ μΌλ‘ μ¬μ©ν μ μλλ‘ μ§μνλ λͺ¨λμ λλ€. νμ μ΄μ§ νΈλ¦¬ κΈ°λ°μ μλ£ κ΅¬μ‘°λ‘, μ΅μκ°μ΄λ μ΅λκ°μ λΉ λ₯΄κ² μ°Ύμλ΄κΈ° μν μ°μ μμ νλ₯Ό ꡬνν λ μ μ©ν©λλ€. heapq λͺ¨λμ κΈ°λ³Έμ μΌλ‘ μ΅μ ν(min-heap)μ μ 곡ν©λλ€.
import heapq
ints = [40, 50, 20]
heapq.heapify(ints) # [20, 50, 40]
min = heapq.heappop(ints) # 20
heapq.heappush(ints, 100) # [40, 50, 100]