ํ์ ์๋ฃ๊ตฌ์กฐ ํธ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ฌ ๊ตฌํํ๋ค. ํธ๋ฆฌ ์ค์์๋ ์์ ์ด์งํธ๋ฆฌ์ด๋ค.
์ต๋ ํธ๋ฆฌ๋ ํญ์ ๋ถ๋ชจ๊ฐ ์์๋ณด๋ค ๊ฐ์ด ํฌ๋ค.
์ต์ ํธ๋ฆฌ๋ ํญ์ ๋ถ๋ชจ๊ฐ ์์๋ณด๋ค ๊ฐ์ด ์๋ค.
(์์๋ผ๋ฆฌ๋ ์๊ดX)
python์ผ๋ก ์ด๋ป๊ฒ ๊ตฌํํ ๊ฒ์ธ๊ฐ? ๊ณ ๋ฏผํ ํ์ ์์ด module์ ์ฐ๋๋ก ํ๊ฒ ๋ค.
์ต์(Min) heap
python์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ต์ heap์ ๊ตฌํํ ์ ์๋ ๋ชจ๋์ ์ ๊ณตํ๋ค.
import heapq
heap์ผ๋ก ์ ์ธํ๋ ๊ฒ์ ์๋๊ณ , ์ผ๋ฐ์ ์ธ ๋ฐฐ์ด์ heap์ผ๋ก ๋ง๋ค ์ ์๋ค.
์๋ฅผ ๋ค์ด ์ ๋ ฌ๋์ง ์์ arr ๋ฐฐ์ด์ heapify๋ก ์ ๋ ฌํ ์ ์๋ค.
heapify(์ ๋ ฌํ ๋ฆฌ์คํธ)
import heapq
arr = [1,5,3,6,2]
heapq.heapify(arr)
print(arr) # [1,2,3,6,5]
์์๋ผ๋ฆฌ๋ ๊ฐ์๋น๊ตํ์ง ์์ผ๋ฏ๋ก sort์๋ ๊ฒฐ๊ณผ์ ์ผ๋ก ์ฐจ์ด๊ฐ ์๋ค.
๊ฐ์ ๋ฃ๋ ์๊ฐ๋ถํฐ heap์ ๋ ฌ์ ํ๊ณ ์ถ๋ค๋ฉด ์๋์ ๊ฐ์ด ๊ตฌํํ๋ฉด ๋๋ค.
heappush(์ ๋ ฌํ ๋ฆฌ์คํธ, ์ ๋ ฌํ ๊ฐ)
import heapq
arr = []
for i in range(10, 0, -1):
heapq.heappush(arr, i)
print(arr) # [1, 2, 5, 4, 3, 9, 6, 10, 7, 8]
๊ฐ์ ์ ๊ฑฐํ ๋๋ heappop์ ์ฌ์ฉํ๋ค. ๊ฐ์ฅ ์์ ๊ฐ(root)๊ฐ pop๋๋ค.
heappop(์ ๋ ฌํ ๋ฆฌ์คํธ)
import heapq
arr = [1,5,3,6,2]
heapq.heapify(arr)
pop = heapq.heappop(arr)
print(pop) # 1
์ต๋(MAX) heap
python์ heapq์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ต์ํ๋ง์ ์ ๊ณตํ๋ค.
๊ทธ๋์ ์ต๋ํ์ ์ฌ์ฉํ๊ธฐ ์ํด์๋ ์ฐํ์ ์ผ๋ก ์ด์ฉํด์ผํ๋ค.
๋ค์ํ ๋ฐฉ๋ฒ์ด ์์ง๋ง, ๋ด๊ฐ ์ฃผ๋ก ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ๊ฐ์ -(๋ง์ด๋์ค)๋ฅผ ๋ถ์ฌ heap์ ์ ์ฅํ๋ ๋ฐฉ๋ฒ์ด๋ค.
import heapq
arr = []
for i in range(10, 0, -1):
heapq.heappush(arr, -i)
print(arr) # [-10, -9, -8, -7, -6, -5, -4, -3, -2, -1]
๋ง์ด๋์ค๋ฅผ ์ ์ธํ๊ณ ๋ณด๋ฉด ์ต๋ํ์ผ๋ก ์ ์ฅ๋์ด ์๋ค.
๊ฐ์ ์ฌ์ฉํ ๋๋ pop ํ ๋ ๋ค์ ๋ง์ด๋์ค๋ฅผ ๋ถ์ด๋ฉด ๋๋ค.
import heapq
arr = []
for i in range(10, 0, -1):
heapq.heappush(arr, -i)
print(arr) # [-10, -9, -8, -7, -6, -5, -4, -3, -2, -1]
temp = heapq.heappop(arr) * -1
temp2 = -(heapq.heappop(arr))
print(temp) # 10
print(temp2) # 9
๋ฐฑ์ค๋ฌธ์
๐ ์ต์ํ
https://www.acmicpc.net/problem/1927
solution
https://github.com/sladuf/Algorithm/blob/master/BaekJoon/BJ1927.py
๐ ์ต๋ํ
https://www.acmicpc.net/problem/11279
solution
https://github.com/sladuf/Algorithm/blob/master/BaekJoon/BJ11279.py
'๐ Algorithm > Tip' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Python] ๋ค์ด๋๋ฏน ํ๋ก๊ทธ๋๋ฐ (DP) (0) | 2022.02.17 |
---|---|
[Algorithm] LCA ์๊ณ ๋ฆฌ์ฆ (0) | 2021.03.28 |
[Algorithm] Dijkstra ๋ค์ต์คํธ๋ผ ์ต๋จ ๊ฒฝ๋ก ์๊ณ ๋ฆฌ์ฆ (0) | 2021.03.11 |
[Algorithm] ๋๋น ์ฐ์ ํ์ BFS / ๊น์ด ์ฐ์ ํ์ DFS (0) | 2020.08.24 |