์ฒ์์ ์ค๊ณํ ๋, ์ฐ์ ์์๋ฅผ 1. ๋ฐ๋๋ผ์ธ, 2. ์ปต๋ผ๋ฉด ์๋ก ์ก๊ณ , ํฐ ์์๋๋ก ์ ๋ ฌ์ ํ ๋ค์ ์นด์ดํธ์ ๋น๊ต๋ฅผ ํ๋ ๋ฐฉ๋ฒ์ ์ทจํ๋๋ฐ, ๋ค์๊ณผ ๊ฐ์ ์์ธ๋ฅผ ๋ฐ๊ฒฌํ ์ ์์๋ค.
4
1 50
2 30
3 60
3 70
# ๋ต : 180
# ์ถ๋ ฅ : 160
๊ทธ๋ ๋ค๋ฉด, ์ด๋ป๊ฒ ์ฒ๋ฆฌํด์ผํ ๊น?
๋ฐฐ์ด์ ์ค๋ฆ์ฐจ์ ์ ๋ ฌํ ๋ค, ํ์ ์ผ๋จ ์ปต๋ผ๋ฉด ์๋ฅผ ๋ค ์ง์ด๋ฃ๊ณ , ํ์ ๊ธธ์ด๋ณด๋ค ๋ฐ๋๋ผ์ธ ์ซ์๊ฐ ๋ ์์ผ๋ฉด, ํ์์ pop์ ์ํจ๋ค. ์ด๋, ์ต์ํ์ด๋ฏ๋ก pop์ ์ํค๋ฉด ๊ฐ์ฅ ์์ ์ซ์๊ฐ ๋์ค๋ฏ๋ก ์ปต๋ผ๋ฉด ์์ ์ต๋๊ฐ์ ๊ตฌํ ์ ์๋ค.
(1, 50) , len(queue) = 0 -> queue[50]
(2, 30) , len(queue) = 1 -> queue[50, 30]
(3, 60) , len(queue) = 2 -> queue[60, 50, 30]
(3, 70) , len(queue) = 3 -> queue[70, 60, 50, 30], queue.pop() : queue[70, 60, 50]
: pop์ ํ ๋ ๊ฐ์ฅ ๋จผ์ ๋ค์ด์จ ์์๊ฐ ๋์ค๋ ๋์ ์ฐ์ ์์๊ฐ ๊ฐ์ฅ ๋์ ์์๊ฐ ๋์ค๋ ํ
๋ฐฐ์ด, ์ฐ๊ฒฐ๋ฆฌ์คํธ, ํ 3๊ฐ์ง๋ก ๊ตฌํํ ์ ์์ง๋ง, ๋ฐฐ์ด์ด๋ ์ฐ๊ฒฐ๋ฆฌ์คํธ๋ก ๊ตฌํํ ๊ฒฝ์ฐ, ๋ฐ์ดํฐ ์ฝ์ ๊ณผ ์ญ์ ๊ณผ์ ์์ ๋ฐ์ดํฐ๋ฅผ ํ ์นธ์ฉ ๋น๊ธฐ๊ฑฐ๋ ๋ฏธ๋ ์ฐ์ฐ์ ๊ณ์ ํด์ผํ๋ค.
๋ํ, ์ฝ์ ์ ์์น๋ฅผ ์ฐพ๊ธฐ์ํด ๋ฐฐ์ด์ ์ ์ฅ๋ ๋ชจ๋ ๋ฐ์ดํฐ์ ์ฐ์ ์์๋ฅผ ๋น๊ตํด์ผํ๋ค. ์ฐ๊ฒฐ๋ฆฌ์คํธ์ ๊ฒฝ์ฐ, ์ฝ์ ์ ์์น๋ฅผ ์ฐพ๊ธฐ ์ํด ์ฒซ๋ฒ์งธ ๋ ธ๋๋ถํฐ ์์ํด ๋ง์ง๋ง ๋ ธ๋์ ์ ์ฅ๋ ๋ฐ์ดํฐ์ ์ฐ์ ์์ ๋น๊ต๋ฅผ ์งํํด์ผํ ์๋ ์๋ค โ ์ฑ๋ฅ์ ํ
๋ฐ๋ผ์, ์ฐ์ ์์ ํ๋ฅผ ๊ตฌํํ ๋๋ ์ผ๋ฐ์ ์ผ๋ก ํ์ผ๋ก ๊ตฌ์ฑํ๋ค.
import heapq
# ์ต์ํ ๊ตฌํ (default)
heap = []
# [1, 2, 3, 4, 5]
for i in range(1, 6):
heapq.heappush(heap, i)
# ์์ ์ซ์ ์์๋๋ก 1, 2, 3, 4, 5 ์ถ๋ ฅ
for i in range(5):
print(heapq.heappop(heap))
####
# ์ต๋ํ ๊ตฌํ
heap = []
values= [1, 5, 3, 2, 4]
# [-5, -4, -3, -2, -1]
for value in values:
heapq.heappush(heap, -value)
# ํฐ ์ซ์ ์์๋๋ก 5, 4, 3, 2, 1 ์ถ๋ ฅ
for i in range(5):
print(-heapq.heappop(heap))
import java.util.PriorityQueue;
import java.util.Collections;
// ์ฐ์ ์์๊ฐ ๋ฎ์ ์ซ์์ธ intํ ์ฐ์ ์์ํ (์ต์ํ)
PriorityQueue<Integer> priorityQueue1 = new PriorityQueue<>();
// ์ฐ์ ์์๊ฐ ๋์ ์ซ์์ธ intํ ์ฐ์ ์์ํ (์ต๋ํ)
PriorityQueue<Integer> priorityQueue2 = new PriorityQueue<>(Collections.reverseOrder());
priorityQueue1.add(1);
priorityQueue1.offer(20);
// ์ฒซ๋ฒ์งธ ๊ฐ์ ๋ฐํํ๊ณ , ์ ๊ฑฐ + ๋น์ด์๋ค๋ฉด null ๋ฐํ
priorityQueue1.poll();
// ์ฒซ๋ฒ์งธ ๊ฐ ์ ๊ฑฐ + ๋น์ด์๋ค๋ฉด ์์ธ ๋ฐ์
priorityQueue1.remove();
// ์ฒซ๋ฒ์งธ ๊ฐ์ ๋ฐํ๋ง ํ๊ณ , ์ ๊ฑฐ X + ๋น์ด์๋ค๋ฉด null ๋ฐํ
priorityQueue1.peek();
// ์ฒซ๋ฒ์งธ ๊ฐ์ ๋ฐํ๋ง ํ๊ณ , ์ ๊ฑฐ X + ๋น์ด์๋ค๋ฉด ์์ธ ๋ฐ์
priorityQueue1.element();
// ์ด๊ธฐํ
priorityQueue1.clear();