๋ณธ๋ฌธ
[Java] ์ฐ์ ์์ ํ(Priority Queue)

๐ก ์ฐ์ ์์ ํ(Priority Queue)
์ผ๋ฐ์ ์ธ ํ๋ ์ ์ผ ๋จผ์ ๋ค์ด๊ฐ ๋ฐ์ดํฐ๊ฐ ๊ฐ์ฅ ๋จผ์ ๋์ค๊ฒ ๋๋ ์๋ฃ๊ตฌ์กฐ ์
๋๋ค. ๋ํ์ ์ธ ์๋ก๋ ์ํ์
๋ฌด๋ฅผ ๊ธฐ๋ค๋ฆฌ๋ ์๋๋ค์ ๋๊ธฐ์ด ์
๋๋ค. ์ด๋ฐ ํ์ ํน์ฑ๊ณผ ๋ฌ๋ฆฌ ์ฐ์ ์์ ํ(Priority Queue)๋ ๋ค์ด๊ฐ ์์์ ์๊ด์์ด ์ผ์ ํ ๊ท์น์ ๋ฐ๋ผ ์ฐ์ ์์๋ฅผ ์ ์ ํ๊ณ , ์ฐ์ ์์๊ฐ ๊ฐ์ฅ ๋์ ๋ฐ์ดํฐ๊ฐ ๊ฐ์ฅ ๋จผ์ ๋์ค๊ฒ ๋ฉ๋๋ค. ๋ํ์ ์ธ ์๋ก๋ ๋ณ์์ ์๊ธํ์๋ฅผ ์๊ฐํ๋ฉด ๋ฉ๋๋ค. ์ํ๊ณผ ๋ฌ๋ฆฌ ์๊ธํ ์ฐ์ ์์์ ๋ฐ๋ผ ๋จผ์ ์ฒ๋ฆฌ๋๊ธฐ ๋๋ฌธ์
๋๋ค.
๐ก ์ฐ์ ์์ ํ ์ฌ์ฉํ๊ธฐ
์ฐ์ ์์ ํ๋ Java๋ด๋ถ์ ์ผ๋ก ๊ตฌํ์ด ๋์ด ์์ต๋๋ค. ์ผ๋ฐ์ ์ธ ํ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ฒ๋ผ add(); peek(); poll(); ๋ฑ์ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
PriorityQueue<Integer> priorityQueue = new PriorityQueue<>();
priorityQueue.add(4); //offer(); ๋ฉ์๋๋ฅผ ์ฌ์ฉํด๋ ๋์ผํ๊ฒ ์ถ๊ฐ๋ฉ๋๋ค.
priorityQueue.add(3);
priorityQueue.add(2);
priorityQueue.add(1);
Integer poll = priorityQueue.poll();
System.out.println(poll); //์ถ๋ ฅ๊ฒฐ๊ณผ 1
์ผ๋ฐ์ ์ธ ํ์ ๋ค๋ฅด๊ฒ ๊ฐ์ฅ ๋จผ์ ๋ค์ด๊ฐ 4๊ฐ ์๋๋ผ, ์ฐ์ ์์๊ฐ ๋์ 1์ด ๋ค์ด๊ฐ์ต๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก ์ซ์๋ ๋ฎ์ ๊ฒ์ด ์ฐ์ ์์๋ฅผ ๋๊ฒ ๋ด ๋๋ค.
๐ก ์ฐ์ ์์ ๋ณ๊ฒฝํ๊ธฐ
์ฐ์ ์์๋ฅผ ์ ํ๋ ๊ธฐ์ค์ Java์ ์ ๋ ฌ๊ธฐ์ค๊ณผ ๋์ผํฉ๋๋ค. Java๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ฎ์ ์ซ์๋ถํฐ ํฐ ์ซ์๊น์ง ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌํ๊ฒ ๋๋๋ฐ, ๋ง์ฝ ๋ค๋ฅธ ์ค๋ฆ์ฐจ์์ผ๋ก ์ฌ์ฉํ๊ณ ์ถ๋ค๋ฉด Compartor ํด๋์ค๋ Comparable ์ธํฐํ์ด์ค๋ฅผ ์ด์ฉํด์ผ ํฉ๋๋ค. ์ ๋ ฌ๊ธฐ์ค์ผ๋ก ์ ํ๋ ๊ฒ๊ณผ ๋์ผํฉ๋๋ค. Integer์ ๊ฐ์ ์ซ์๋ Collections.reversOrder()๋ฅผ ์ฌ์ฉํ๋ฉด ๊ฐํธํ๊ฒ ์ฐ์ ์์๋ฅผ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค.
//์ฐ์ ์์๋ฅผ ๋์ ์ซ์์์ฃผ๋ก ๋ณ๊ฒฝ
PriorityQueue<Integer> priorityQueue = new PriorityQueue<>(Collections.reverseOrder());
priorityQueue.add(1); //offer(); ๋ฉ์๋๋ฅผ ์ฌ์ฉํด๋ ๋์ผํ๊ฒ ์ถ๊ฐ๋ฉ๋๋ค.
priorityQueue.add(2);
priorityQueue.add(3);
priorityQueue.add(4);
Integer poll = priorityQueue.
System.out.println(poll); //์ถ๋ ฅ๊ฒฐ๊ณผ 4
๋๊ธ