python์ ๊ธฐ๋ณธ์ ์ผ๋ก ๊ตฌํ๋ heapq ๋ชจ๋์ด ์์ด ๋ฐ๋ก ๊ฐ์ ธ๋ค ์ธ ์ ์๋ค.
python ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ด์ฅ ๋ชจ๋์ด ๊ธฐ๋ณธ์ ์ผ๋ก ํฌํจ๋์ด์์ด, ๋ณ๋ ์ค์น์์ด `import heapq`๋ก ๋ฐ๋ก ์ฌ์ฉ ๊ฐ๋ฅํ๋ค.
โฌ๏ธ python heap queue algorithm ๊ณต์๋ฌธ์ โฌ๏ธ
https://docs.python.org/3/library/heapq.html
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
์ฐ์ heap ์๋ฃ๊ตฌ์กฐ๋ฅผ ๋ง๋๋ ค๋ฉด ์ด heapq ๋ชจ๋์ ์ฌ์ฉํด์ ๋ฆฌ์คํธ๋ฅผ heap ๊ตฌ์กฐ๋ฅผ ๋ง๋ค ์ ์๋ค.
๋ฐฉ๋ฒ1. heapq.heapify() ์ฌ์ฉ
๊ธฐ์กด์ ์กด์ฌํ๋ ๋ฆฌ์คํธ๋ฅผ ๋ฐ๋ก heap๊ตฌ์กฐ๋ก ๋ณํํ ๋ ์ฌ์ฉ
`heapq.heapify(list)`๋ก, ์ธ์์ ๋ฆฌ์คํธ๋ฅผ ์ ๋ฌํ๋ค.
import heapq
nums = [2,7,4,1]
newHeap = heapq.heapify(nums) # โ
print(newHeap) # None
print(nums) # ํ ๊ตฌ์กฐ๋ก ๋ณ๊ฒฝ๋ ๋ฆฌ์คํธ [1, 2, 4, 7]
์ฌ๊ธฐ์ ์ฒ์์ ๋๋ 4๋ฒ ์ค์ฒ๋ผ ์๋ก ๋ณ์์ ํ ๋นํ๋ ค๊ณ ํ๋ค. ์ด๋ฌ๋ฉด heap์ผ๋ก ๋ฐ๋์ ๊ฐ ์๋ก ํ ๋น๋๊ฒ ์ง? ์๊ฐํ๋๋ฐ, ๊ทธ๋ ์ง ์๋ค.
`heapq.heapify(nums)` ํจ์๋ ์ธ์๋ก ์ ๋ฌ๋ ๋ฆฌ์คํธ nums๋ฅผ ์ง์ ์์ ํ์ง, ์๋ก์ด ํ ๊ฐ์ฒด๋ฅผ ๋ฐํํ์ง ์๋๋ค.
์ฆ, heapq.heapify(nums)๋ฅผ ํ๋ฉด nums ๋ฆฌ์คํธ๋ฅผ ์ง์ ํ ๊ตฌ์กฐ๋ก ๋ฐ๊ฟ์ค๋ค.
heapq.heapify(nums)์ ๋ฐํ๊ฐ์ None์ผ๋ก ์๋ก ํ ๋น๋ ๋ณ์ newHeap์๋ ์๋ฌด๊ฒ๋ ํ ๋น๋์ง ์๊ณ , nums ๋ฆฌ์คํธ๊ฐ ๋ด๋ถ์ ์ผ๋ก min-heap์ผ๋ก ์ฌ์ ๋ ฌ๋ ํ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง๋ค.
โ ์๋์ฒ๋ผ ์ฌ์ฉ
import heapq
nums = [2,7,4,1]
heapq.heapify(nums) โ
print(nums) # ํ ๊ตฌ์กฐ๋ก ๋ณ๊ฒฝ๋ ๋ฆฌ์คํธ [1, 2, 4, 7]
๋ฐฉ๋ฒ2. heapq.heappush() ์ฌ์ฉ
heappush() ํจ์๋ฅผ ์ฌ์ฉํด์ ๋ฆฌ์คํธ์ ์์๋ฅผ ํ๋์ฉ ์ถ๊ฐํ ๋ ์ฌ์ฉํ๋ค.
`heapq.headpush(list, value)`๋ก ์ฒซ๋ฒ์งธ ์ธ์์ ๋ฆฌ์คํธ, ๋๋ฒ์งธ ์ธ์์ ์ถ๊ฐํ๋ ค๋ ์์๋ฅผ ์ ๋ฌํ๋ค.
import heapq
heap = heapq.heappush([], 2) # โ ์๋ชป๋ ์ฌ์ฉ
print(heap) #None
ํ์ง๋ง ์์ ๊ฐ์ด ์ฌ์ฉํ๋ฉด ์๋๋ค.
๋ฐฉ๋ฒ1 ์์ ์ ๋ง์ฐฌ๊ฐ์ง๋ก 3๋ฒ ๋ผ์ธ์ฒ๋ผ heap์ด๋ผ๋ ๋ณ์์ ์ฌํ ๋นํ๋ฉด ์ด ๋ณ์์ ๋ฆฌํด๊ฐ์ None์ด ๋๋ค.
โ ์๋์ฒ๋ผ ์ฌ์ฉ
heap = [] # ๋ด๊ฐ ์ฌ์ฉํ ๋ฆฌ์คํธ๋ฅผ ์ง์ ์ ์ธ
heapq.heappush(heap, 2) # ์ด ๋ฆฌ์คํธ๋ฅผ ํ์ฒ๋ผ ์ฌ์ฉ
heapq.heappush(heap, 7)
heapq.heappush(heap, 4)
heapq.heappush(heap, 1)
print(heap) # ๋ด๋ถ ๊ตฌ์กฐ (์: [1, 2, 4, 7])
minVal = heapq.heappop(heap)
print(minVal) # 1
print(heap) # [2, 4, 7]
์ ๋ฆฌ
- python `heapq` ๋ชจ๋์ in-place ๋ฐฉ์์ผ๋ก ๋ฆฌ์คํธ๋ฅผ ํ ์๋ฃ๊ตฌ์กฐ๋ก ๋ณํํ๋ค. ์ฆ, ์ ๋ฌ๋ฐ์ ๋ฆฌ์คํธ๋ฅผ ์ง์ ์กฐ์ํ์ฌ ์์ ํ๋ค.
- ํ๊ตฌ์กฐ๋ก ์ฌ์ฉํ๊ณ ์ถ์ ๋ฆฌ์คํธ๋ฅผ ์ฐ๋ฆฌ๊ฐ ๋ช
์์ ์ผ๋ก ์ ์ํด์ ๊ด๋ฆฌํด์ผํ๋ค.
์์ธํ ์ค๋ช ํ๋ฉด, heapq ๋ชจ๋์ ์ ์ฉ ํ ์๋ฃ๊ตฌ์กฐ ํด๋์ค๊ฐ ์๋ค. ๊ทธ๋์ ๋์ ์ ์ผ๋ฐ์ ์ธ ํ์ด์ฌ ๋ฆฌ์คํธ๋ฅผ ํ์ฒ๋ผ ์ฌ์ฉํ๊ฒ ๋์ด์๋ค.
๋ฐ๋ผ์ heap ์ ์ฉ ๊ฐ์ฒด๋ฅผ ์์ฑํ๋๊ฒ ์๋๋ผ, ์ฐ๋ฆฌ๊ฐ ๋ฆฌ์คํธ๋ฅผ ๋ง๋ค์ด์, ๊ทธ ๋ฆฌ์คํธ๋ฅผ heap์ผ๋ก ๊ด๋ฆฌํด์ผํ๋ค๋ ๋ป์ด๋ค. - `heqpq`๋ ๋ง์น `list`๋ฅผ ํ ๋ชจ๋๋ก ์๋ํ๊ฒ ํ๋ ๋๊ตฌ์ด๋ค. heapq๋ฅผ ์ด๋ค๊ณ ์๋์ผ๋ก heap ๊ฐ์ฒด๋ฅผ ์์ฑํด์ฃผ๋๊ฒ ์๋๋ผ, ์ฐ๋ฆฌ๊ฐ ๋จผ์ ๋ฆฌ์คํธ๋ฅผ ๋ง๋ค๊ณ ๊ทธ ๋ฆฌ์คํธ๋ฅผ heapq์ ๋๊ฒจ์ฃผ์ด ํ ์๋ฃ๊ตฌ์กฐ๋ก ๋ณํ๋ ๋ฆฌ์คํธ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด๋ค.
'Python' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| python vs javascript | ๋น ๋ฐฐ์ด truthy falsy (1) | 2025.07.03 |
|---|---|
| python dictionary์ ์๋ก์ด ํค์ ๋์ ๊ฐ ํ ๋นํ๊ธฐ feat.๋ฌธ์์ด ๋น๋ ์ธ๊ธฐ (0) | 2025.05.13 |
| ํ์ด์ฌ์์ ๋งํฌ๋ ๋ฆฌ์คํธ๋ก ๋ฉ์๋ ํธ์ถํ๊ธฐ (0) | 2025.04.23 |
| ๊ตฌ๊ธ ์ฝ๋ฉ (0) | 2024.05.28 |
| ๋ฌธ์์ด ์ ๋ ฌ python vs javaScript (0) | 2024.02.18 |