๐Heapq
ํ์ด์ฌ์ ๋ฆฌ์คํธ๋ฅผ ์ต์ ํ์ฒ๋ผ ๋ค๋ฃฐ ์ ์๋๋ก ํ๋ ๋ชจ๋
import heapq
hq = []
heapq.heapify(hq) # ๊ธฐ์กด list๋ฅผ Min Heap์ผ๋ก ๋ณํ- heapq๋ ์์ฑํ๋ ๊ฒ์ด ์๋๋ผ ์ผ๋ฐ ๋ฆฌ์คํธ๋ฅผ ์ด์ฉ
- ์ฐ์ ์์ ํ ๊ตฌํ์ ์ฌ์ฉ
PriorityQueue๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ณด๋ค ๋น ๋ฆ- default๋ ์ต์ ํ
heapq๋ฅผ Max Heap์ผ๋ก ๋ง๋๋ ค๋ฉด?
- v๋ฅผ -v์ ํํ๋ก ์ถ๊ฐ
- v๋ฅผ (-v, v)์ tuple ํํ๋ก ์ถ๊ฐ
๐์ฝ์ /์ญ์ ํจ์
- O(log n)์ ์๊ฐ ๋ณต์ก๋๋ฅผ ๊ฐ์ง
๐heappush(list, v)
list์ v๋ฅผ ์ถ๊ฐํ๋ ํจ์
heapq.heappush(hp, v) # list์ Min Heap ๊ธฐ์ค์ผ๋ก v๊ฐ ์ถ๊ฐ๐heappop(list)
์ต์๊ฐ(Min Heap ๊ธฐ์ค)์ ์ญ์ ํ returnํ๋ ํจ์
heapq.heappop(hp) # list์์ Min Heap ๊ธฐ์ค์ผ๋ก ๊ฐ ์ญ์ ํ return
heapq.heappush()๋ก ๋ฐ์ดํฐ๋ฅผ ๋ฃ๋๋ค๊ณ ์ค๋ฆ์ฐจ์ ์ ๋ ฌ์ด ๋์ง ์์
heapq.heappush()๋ก ๋ฃ์ด์ค ๋ฐ์ดํฐ๋ฅผheapq.heappop()์ ํตํด ๊บผ๋ด๋ ๊ณผ์ ์์ ๋ฐ์ดํฐ๊ฐ ์ ๋ ฌ ( โตheapq.heappop()์ ํธ์ถํ๋ฉด ์ด์ง ํธ๋ฆฌ์ ์ฌ๋ฐฐ์น๋ฅผ ํตํด ๋งค๋ฒ ์๋ก์ด ์ต์๊ฐ์ ์ธ๋ฑ์ค 0์ ์์น์ํด)
๐n๋ฒ์งธ๋ก ์์ ๊ฐ์ ์ ๊ทผํ๊ธฐ ์ํด์๋? hq[1]๋ก ์ ๊ทผํ๋ ๊ฒ์ด ์๋
heapq.heappop()์ผ๋ก n-1๊ฐ์ ์์ ๊ฐ ์ญ์ โ hq[0]์ ์ ๊ทผํด n๋ฒ์งธ๋ก ์์ ๊ฐ ์ ๊ทผheapq.nsmallest(n, list)๋ก n๊ฐ์ ์์ ๊ฐ ๋ฆฌ์คํธ ๋ง๋ ํ ๊ฐ์ฅ ๋ง์ง๋ง ๊ฐ(hq[-1]) ์ ๊ทผ
๐์ต๋๊ฐ/์ต์๊ฐ ์ฐพ๋ ํจ์
๐์ต์๊ฐ/์ต๋๊ฐ
heapq์์๋ ํญ์ 0๋ฒ์งธ ๊ฐ์ด ์ต์๊ฐ (default์ธ Min heap ๊ธฐ์ค)
nums = [5, 4, 3, 2, 1]
heapq.heapify(nums)
nums[0] # 1 , ์ต์๊ฐ- Max Heap์ผ๋ก ๋ง๋ค๋ฉด 0๋ฒ์งธ ๊ฐ์ด ํญ์ ์ต๋๊ฐ
๐nlargest(n, list, key)
list์์ n๊ฐ์ ๊ฐ์ฅ ํฐ ์์๋ค์ ์ฐพ์ ๋ฆฌ์คํธ๋ก returnํ๋ ํจ์
heapq.nlargest(n, list)- key๋ ์๋ต ๊ฐ๋ฅ
- key์๋ ๊ฐ์ฅ ํฐ์ ์ ์๋ฅผ ํ ์ ์์ (lambda ๊ฐ์ ํจ์์์ผ๋ก)
๐nsmallest(n, list, key)
list์์ n๊ฐ์ ๊ฐ์ฅ ์์ ์์๋ค์ ์ฐพ์ ๋ฆฌ์คํธ๋ก returnํ๋ ํจ์
heapq.nsmallest(n, list)- key๋ ์๋ต ๊ฐ๋ฅ
- key์๋ ๊ฐ์ฅ ์์์ ์ ์๋ฅผ ํ ์ ์์ (lambda ๊ฐ์ ํจ์์์ผ๋ก)