๋ณธ๋ฌธ

[Java] ์šฐ์„ ์ˆœ์œ„ ํ(Priority Queue)

์ด๋ฏธ์ง€ ์ถœ์ฒ˜: https://dzone.com/articles/the-developers-guide-to-collections-queues

 

 

๐Ÿ’ก ์šฐ์„ ์ˆœ์œ„ ํ(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

 

๊ณต์œ 

๋Œ“๊ธ€

Cloud & AI Engineering | ์ž„์Šนํ•œ

design by tokiidesu. powerd by AXZ.