๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๊ฐœ๋ฐœ/Java

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

by 1mj 2022. 1. 17.

ํ(Queue)

๋จผ์ € ๋„ฃ์€ ๋ฐ์ดํ„ฐ๊ฐ€ ๋จผ์ € ๋‚˜์˜ค๋Š” FIFO(First In First Out) ๊ตฌ์กฐ๋กœ ์ €์žฅํ•˜๋Š” ์ž๋ฃŒ๊ตฌ์กฐ์˜ ํ•œ ํ˜•์‹์ด๋‹ค.

 

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

๋จผ์ € ๋“ค์–ด์˜จ ๊ฒƒ๋ถ€ํ„ฐ ๋จผ์ € ๋‚˜๊ฐ€๋Š” ์ผ๋ฐ˜์ ์ธ ํ(์„ ํ˜• ๋˜๋Š” ์›ํ˜•)์™€ ๋‹ค๋ฅด๊ฒŒ ์šฐ์„ ์ˆœ์œ„๋ฅผ ๊ฒฐ์ •ํ•˜๊ณ  ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋†’์€ ์—˜๋ฆฌ๋จผํŠธ๊ฐ€ ๋จผ์ € ๋‚˜๊ฐ€๋Š” ์ž๋ฃŒ๊ตฌ์กฐ์ด๋‹ค.

  • ๋†’์€ ์šฐ์„ ์ˆœ์œ„์˜ ์š”์†Œ๊ฐ€ ๋จผ์ € ๋‚˜์™€์•ผ ํ•˜๋ฏ€๋กœ ํ์— ๋“ค์–ด๊ฐ€๋Š” ์š”์†Œ๋Š” ๋น„๊ต ๊ฐ€๋Šฅํ•œ ๊ธฐ์ค€์ด ์žˆ์–ด์•ผ ํ•œ๋‹ค.
  • ๋ฐฐ์—ด์ด๋‚˜ ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ๊ฐ€ ์•„๋‹Œ ํž™(heap)์ด๋ผ๋Š” ์ž๋ฃŒ๊ตฌ์กฐ๋กœ ๊ตฌํ˜„ํ•œ๋‹ค.
  • ๋‚ด๋ถ€ ๊ตฌ์กฐ๋Š” ์ด์ง„ํŠธ๋ฆฌ๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๋‹ค.
  • ํž™ ์ž๋ฃŒ๊ตฌ์กฐ๋Š” ๋ถ€๋ชจ ๋…ธ๋“œ๋Š” ์ž์‹ ๋…ธ๋“œ๋ณด๋‹ค ํ•ญ์ƒ ์šฐ์„ ์ˆœ์œ„๊ฐ€ ์•ž์„ ๋‹ค๋Š” ์กฐ๊ฑด์„ ๋งŒ์กฑ์‹œํ‚ค๋ฉฐ ์™„์ „ ์ด์ง„ํŠธ๋ฆฌ๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด๋‹ค.
๐Ÿง ํž™(heap) ์ž๋ฃŒ๊ตฌ์กฐ
์šฐ์„ ์ˆœ์œ„ ํ๋Š” ํž™ ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ์ด์šฉํ•˜์—ฌ ๊ตฌํ˜„๋œ๋‹ค.
ํž™์€ ์ตœ์†Ÿ๊ฐ’ ๋˜๋Š” ์ตœ๋Œ“๊ฐ’์„ ๋น ๋ฅด๊ฒŒ ์ฐพ์•„๋‚ด๊ธฐ ์œ„ํ•ด ์™„์ „์ด์ง„ํŠธ๋ฆฌ ํ˜•ํƒœ๋กœ ๋งŒ๋“ค์–ด์ง„ ์ž๋ฃŒ๊ตฌ์กฐ์ด๋‹ค.
์ด์ง„ํŠธ๋ฆฌ๋Š” ๋ชจ๋“  ๋…ธ๋“œ์˜ ์ตœ๋Œ€ ์ฐจ์ˆ˜๋ฅผ 2๋กœ ์ œํ•œํ•œ ํŠธ๋ฆฌ๊ตฌ์กฐ(์ž์‹ ๋…ธ๋“œ๋ฅผ ์ตœ๋Œ€ 2๊ฐœ๋งŒ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์Œ)์ด๊ณ , ์™„์ „ ์ด์ง„ํŠธ๋ฆฌ๋ฅผ ๋งŒ์กฑํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋งˆ์ง€๋ง‰ ๋ ˆ๋ฒจ์„ ์ œ์™ธํ•œ ๋ชจ๋“  ๋…ธ๋“œ๊ฐ€ ์™ผ์ชฝ๋ถ€ํ„ฐ ์ฑ„์›Œ์ ธ ์žˆ์–ด์•ผ ํ•œ๋‹ค.
์ด์ง„ํŠธ๋ฆฌ์™€ ๋‹ค๋ฅด๊ฒŒ ์ค‘๋ณต ๊ฐ’์ด ํ—ˆ์šฉ๋œ๋‹ค.

์šฐ์„ ์ˆœ์œ„ ํ์— ๊ฐ’์„ ์ถ”๊ฐ€ํ•˜๋ฉด ์ผ๋‹จ ๋งˆ์ง€๋ง‰์— ๋„ฃ๊ณ  ๋ถ€๋ชจ์™€ ๋น„๊ตํ•ด์„œ ์ž‘์œผ๋ฉด ๊ตํ™˜ํ•˜์—ฌ ์˜ค๋ฅธ์ชฝ๊ณผ ๊ฐ™์€ ์ตœ์†Œ ํž™ ํŠธ๋ฆฌ๋ฅผ ๋งŒ๋“ค๊ฒŒ ๋œ๋‹ค.

์šฐ์„ ์ˆœ์œ„ ํ์—์„œ ๊ฐ’์„ ์ œ๊ฑฐํ•˜๋ ค๋ฉด ๋ฃจํŠธ ๋…ธ๋“œ์™€ ๋งˆ์ง€๋ง‰ ๋…ธ๋“œ๋ฅผ ์Šค์™‘ํ•˜์—ฌ ์‚ฌ์ด์ฆˆ๋ฅผ ์ค„์—ฌ ์ž์‹ ๋…ธ๋“œ ๋‘ ๊ฐœ๋ฅผ ๋น„๊ตํ•˜๋Š” ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•˜์—ฌ ์ œ๊ฑฐํ•œ๋‹ค. ์ตœ๋Œ€ ํž™ ํŠธ๋ฆฌ๋Š” ์ตœ์†Œ ํž™ ํŠธ๋ฆฌ์™€ ๋ฐ˜๋Œ€๋กœ ๋ถ€๋ชจ ๋…ธ๋“œ๊ฐ€ ์ž์‹ ๋…ธ๋“œ๋ณด๋‹ค ํฐ ๊ฐ’์„ ๋งŒ์กฑํ•˜๋Š” ํŠธ๋ฆฌ์ด๋‹ค.

 

์šฐ์„ ์ˆœ์œ„ ํ ์‚ฌ์šฉ ๋ฐฉ๋ฒ•

์„ ์–ธ

// ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋‚ฎ์€ ์ˆซ์ž ์ˆœ
PriorityQueue<Integer> priorityQueue = new PriorityQueue<>();
// ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋†’์€ ์ˆซ์ž ์ˆœ
PriorityQueue<Integer> priorityQueue = new PriorityQueue<>(Collections.reverseOrder());

์‚ฝ์ž…

priorityQueue.add(1);	// ํ๊ฐ€ ๊ฝ‰ ์ฐจ๋ฉด ์˜ˆ์™ธ ๋ฐœ์ƒ
priorityQueue.offer(1);	// ํ๊ฐ€ ๊ฝ‰ ์ฐจ๋ฉด ์‹คํŒจ๋ฅผ ์˜๋ฏธํ•˜๋Š” false ๋ฆฌํ„ด

์ œ๊ฑฐ

priorityQueue.peek();		// ์ฒซ ๋ฒˆ์งธ ๊ฐ’ ๋ฐ˜ํ™˜(์ œ๊ฑฐX)
priorityQueue.poll();		// ์ฒซ ๋ฒˆ์งธ ๊ฐ’์„ ๋ฐ˜ํ™˜ & ์ œ๊ฑฐ
priorityQueue.remove();		// ์ฒซ ๋ฒˆ์งธ ๊ฐ’์„ ์ œ๊ฑฐ
priorityQueue.clear();		// ์ดˆ๊ธฐํ™”

 

์ฐธ๊ณ ์ž๋ฃŒ ๋ฐ ์ถœ์ฒ˜ ๐Ÿ™‡‍โ™‚๏ธ

https://st-lab.tistory.com/205

https://coding-factory.tistory.com/603

๋Œ“๊ธ€