ํ์ ์๋ฃ๊ตฌ์กฐ ํธ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ฌ ๊ตฌํํ๋ค. ํธ๋ฆฌ ์ค์์๋ ์์ ์ด์งํธ๋ฆฌ์ด๋ค.
์ต๋ ํธ๋ฆฌ๋ ํญ์ ๋ถ๋ชจ๊ฐ ์์๋ณด๋ค ๊ฐ์ด ํฌ๋ค.
์ต์ ํธ๋ฆฌ๋ ํญ์ ๋ถ๋ชจ๊ฐ ์์๋ณด๋ค ๊ฐ์ด ์๋ค.

(์์๋ผ๋ฆฌ๋ ์๊ด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
1927๋ฒ: ์ต์ ํ
์ฒซ์งธ ์ค์ ์ฐ์ฐ์ ๊ฐ์ N(1 โค N โค 100,000)์ด ์ฃผ์ด์ง๋ค. ๋ค์ N๊ฐ์ ์ค์๋ ์ฐ์ฐ์ ๋ํ ์ ๋ณด๋ฅผ ๋ํ๋ด๋ ์ ์ x๊ฐ ์ฃผ์ด์ง๋ค. ๋ง์ฝ x๊ฐ ์์ฐ์๋ผ๋ฉด ๋ฐฐ์ด์ x๋ผ๋ ๊ฐ์ ๋ฃ๋(์ถ๊ฐํ๋) ์ฐ์ฐ์ด๊ณ , x๊ฐ 0
www.acmicpc.net
solution
https://github.com/sladuf/Algorithm/blob/master/BaekJoon/BJ1927.py
GitHub - sladuf/Algorithm
Contribute to sladuf/Algorithm development by creating an account on GitHub.
github.com
๐ ์ต๋ํ
https://www.acmicpc.net/problem/11279
11279๋ฒ: ์ต๋ ํ
์ฒซ์งธ ์ค์ ์ฐ์ฐ์ ๊ฐ์ N(1 โค N โค 100,000)์ด ์ฃผ์ด์ง๋ค. ๋ค์ N๊ฐ์ ์ค์๋ ์ฐ์ฐ์ ๋ํ ์ ๋ณด๋ฅผ ๋ํ๋ด๋ ์ ์ x๊ฐ ์ฃผ์ด์ง๋ค. ๋ง์ฝ x๊ฐ ์์ฐ์๋ผ๋ฉด ๋ฐฐ์ด์ x๋ผ๋ ๊ฐ์ ๋ฃ๋(์ถ๊ฐํ๋) ์ฐ์ฐ์ด๊ณ , x๊ฐ
www.acmicpc.net
solution
https://github.com/sladuf/Algorithm/blob/master/BaekJoon/BJ11279.py
GitHub - sladuf/Algorithm
Contribute to sladuf/Algorithm development by creating an account on GitHub.
github.com
'๐ 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 |