[Python] ํž™๐ŸŒฒ์ด๋ž€ ๋ฌด์—‡์ด์ง€ ?

ํž™์ด๋ž€?

ํž™์ด๋ž€, ํŠธ๋ฆฌ ๊ตฌ์กฐ ์ค‘์—์„œ ์™„์ „์ด์ง„ํŠธ๋ฆฌ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๋Š” ์ž๋ฃŒ๊ตฌ์กฐ์ด๋‹ค. ํž™์€ ์ตœ๋Œ“๊ฐ’๊ณผ ์ตœ์†Ÿ๊ฐ’์„ ๊ตฌํ•˜๋Š”๋ฐ์— ์•„์ฃผ ํƒ์›”ํ•˜๋‹ค. ๊ทธ ์ด์œ ๋Š” ํž™์„ ์ดํ•ดํ•˜๊ณ  ๋‚˜๋ฉด ํ™•์‹คํžˆ ์•Œ๊ฒŒ ๋  ๊ฒƒ์ด๋‹ค.

ํž™์ด ๋˜๊ธฐ์œ„ํ•œ ๋งŒ์กฑ ์กฐ๊ฑด์œผ๋กœ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

  • ์ž์‹๋…ธ๋“œ๋ณด๋‹ค ๋ถ€๋ชจ๋…ธ๋“œ์˜ ๊ฐ’์ด ๋” ์ปค์•ผ ํ•œ๋‹ค.
  • ์™ผ์ชฝ ์ž์‹๋…ธ๋“œ๋ณด๋‹ค ์˜ค๋ฅธ์ชฝ ์ž์‹๋…ธ๋“œ์˜ ๊ฐ’์ด ๋” ์ปค์•ผ ํ•œ๋‹ค.


์ด๋ฏธ์ง€์ถœ์ฒ˜

ํž™์—๋Š” ์œ„์™€ ๊ฐ™์ด ๋‘๊ฐ€์ง€์˜ ์ข…๋ฅ˜๊ฐ€ ์žˆ๋Š”๋ฐ, ๋ฃจํŠธ๋…ธ๋“œ๊ฐ€ ๊ฐ€์žฅ ์ž‘์€ ์ตœ์†Œ ํž™, ๋ฃจํŠธ๋…ธ๋“œ๊ฐ€ ๊ฐ€์žฅ ํฐ ์ตœ๋Œ€ ํž™์ด ์žˆ๋‹ค.

ํŒŒ์ด์ฌ์—์„œ๋Š” ์ด๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ํŽธํ•˜๋„๋ก ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ ์ œ๊ณตํ•œ๋‹ค.

๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ

import heapq

heapq ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ๋ฆฌ์ŠคํŠธ๋ฅผ ์ตœ์†Œํž™์œผ๋กœ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋„๋ก ํ•œ๋‹ค. ๋ฆฌ์ŠคํŠธ์ด๊ธฐ ๋•Œ๋ฌธ์— ์ธ๋ฑ์Šค๊ฐ’ ์ ‘๊ทผ์œผ๋กœ๋„ ํ™œ์šฉ์ด ๊ฐ€๋Šฅํ•˜๊ณ , ํž™์ด๊ธฐ ๋•Œ๋ฌธ์— ํŠธ๋ฆฌ๊ตฌ์กฐ ํƒ์ƒ‰ ๋ฐฉ์‹๋„ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•ด์ง„๋‹ค.

ํž™์˜ ์ธ๋ฑ์Šค

ํž™์˜ ์ธ๋ฑ์Šค๋Š” ๊ฐ ๊นŠ์ด์— ๋”ฐ๋ผ ์ธ๋ฑ์Šค ๊ฐ’์ด ์ฃผ์–ด์ง„๋‹ค.

์ด๋ฏธ์ง€์ถœ์ฒ˜
n๊ฐœ์˜ ์›์†Œ๋ฅผ ๊ฐ€์ง€๋Š” ๋ฆฌ์ŠคํŠธ๋ฅผ ํž™์œผ๋กœ ๋ณ€ํ™˜ํ•˜๋ฉด,

  • ์™ผ์ชฝ ์ž์‹๋…ธ๋“œ์˜ ์ธ๋ฑ์Šค : 2n
  • ์˜ค๋ฅธ์ชฝ ์ž์‹๋…ธ๋“œ์˜ ์ธ๋ฑ์Šค : 2n + 1

๊ธฐ์กด ๋ฆฌ์ŠคํŠธ๋ฅผ ํž™์œผ๋กœ ์‚ฌ์šฉํ•˜๊ธฐ

heapify() ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

list1 = [1, 2, 3, 4]
heapq.heapify(list1)

ํž™์— ๊ฐ’ ์ถ”๊ฐ€ํ•˜๊ธฐ

heap ์ด๋ผ๊ณ  ์„ ์–ธํ•ด๋†“์€ heapq์— 3 ์ด๋ผ๋Š” ๊ฐ’์„ ์ถ”๊ฐ€ํ•˜๊ณ  ์‹ถ์„ ๊ฒฝ์šฐ, ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

heapq.heappush(heap, 3)

heapq ๋‚ด์˜ ์ ์ ˆํ•œ ์œ„์น˜๋ฅผ ์ž๋™์œผ๋กœ ์ฐพ์•„ ์ถ”๊ฐ€ํ•œ๋‹ค.

ํž™์—์„œ ๊ฐ’ ์‚ญ์ œํ•˜๊ธฐ

heapq.heappop(heap)

ํž™์—์„œ ๊ฐ€์žฅ ์ž‘์€ ๊ฐ’์„ ์‚ญ์ œํ•˜์—ฌ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
๊ฐ€์žฅ ์ž‘์€ ๊ฐ’์ด ์‚ญ์ œ๋œ ํ›„์—๋Š” ๋‚จ์€ ํž™ ๋‚ด๋ถ€์˜ ๊ฐ€์žฅ ์ž‘์€ ๊ฐ’์ด ์ž๋ฆฌ๋ฅผ ๋Œ€์ฒดํ•œ๋‹ค.

์ตœ๋Œ€ํž™์€?

์œ„์—์„œ ํž™์€ ์ตœ์†Œํž™๊ณผ ์ตœ๋Œ€ํž™์œผ๋กœ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค๊ณ  ํ–ˆ๋Š”๋ฐ, heapq ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ์ตœ์†Œํž™์œผ๋กœ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค๊ณ  ํ–ˆ๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด heapq๋ฅผ ์ตœ๋Œ€ํž™์œผ๋กœ ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์„๊นŒ?

๋ฐ”๋กœ ์šฐ์„ ์ˆœ์œ„๋ฅผ ๋ถ€์—ฌํ•˜๋Š” ๊ฒƒ์ด๋‹ค โ—๏ธโ—๏ธ

ํž™์— ์‚ฌ์šฉํ•˜๋Š” ๊ฐ’์„ (์šฐ์„ ์ˆœ์œ„, ๊ฐ’)์˜ ํ˜•ํƒœ์ธ ํŠœํ”Œ๋กœ ์‚ฌ์šฉํ•˜๋ฉด ์ตœ๋Œ€ํž™์œผ๋กœ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

list2 = [(1, 10), (2, 9), (3, 8), (4, 7)]
heapq.heapify(list2)

์ด๋ ‡๊ฒŒ ๋˜๋ฉด ์šฐ์„ ์ˆœ์œ„์— ์˜ํ•ด ๋ฃจํŠธ๋…ธ๋“œ์˜ ๊ฐ’์ด ๊ฐ€์žฅ ํฐ ์ตœ๋Œ€ ํž™์œผ๋กœ ๋ณ€๊ฒฝ์ด ๊ฐ€๋Šฅํ•˜๋‹ค ๐Ÿ˜†

์ข‹์€ ์›นํŽ˜์ด์ง€ ์ฆ๊ฒจ์ฐพ๊ธฐ