๐Ÿ“–Heapq

ํŒŒ์ด์ฌ์˜ ๋ฆฌ์ŠคํŠธ๋ฅผ ์ตœ์†Œ ํž™์ฒ˜๋Ÿผ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๋ชจ๋“ˆ

import heapq
 
hq = []
heapq.heapify(hq) # ๊ธฐ์กด list๋ฅผ Min Heap์œผ๋กœ ๋ณ€ํ™˜
  • heapq๋Š” ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์ผ๋ฐ˜ ๋ฆฌ์ŠคํŠธ๋ฅผ ์ด์šฉ
  • ์šฐ์„ ์ˆœ์œ„ ํ ๊ตฌํ˜„์— ์‚ฌ์šฉ
  • PriorityQueue ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ณด๋‹ค ๋น ๋ฆ„
  • default๋Š” ์ตœ์†Œ ํž™

heapq๋ฅผ Max Heap์œผ๋กœ ๋งŒ๋“œ๋ ค๋ฉด?

  1. v๋ฅผ -v์˜ ํ˜•ํƒœ๋กœ ์ถ”๊ฐ€
  2. 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]๋กœ ์ ‘๊ทผํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹˜

  1. heapq.heappop()์œผ๋กœ n-1๊ฐœ์˜ ์ž‘์€ ๊ฐ’ ์‚ญ์ œ โ†’ hq[0]์— ์ ‘๊ทผํ•ด n๋ฒˆ์งธ๋กœ ์ž‘์€ ๊ฐ’ ์ ‘๊ทผ
  2. 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 ๊ฐ™์€ ํ•จ์ˆ˜์‹์œผ๋กœ)