๊ฐœ๋ฐœ์ผ์ง€

[Java] PriorityQueue (์šฐ์„ ์ˆœ์œ„ ํ) / ํ”„๋กœ์„ธ์Šค ๋ณธ๋ฌธ

Algorithm

[Java] PriorityQueue (์šฐ์„ ์ˆœ์œ„ ํ) / ํ”„๋กœ์„ธ์Šค

O'mil 2024. 5. 2. 20:50
728x90

๐Ÿ”— ๋งํฌ

ํ”„๋กœ์„ธ์Šค

 

๐Ÿ“Œ ๋ฌธ์ œ ์„ค๋ช…

  • ์šด์˜์ฒด์ œ๊ฐ€ ๋‹ค์Œ ๊ทœ์น™์— ๋”ฐ๋ผ ํ”„๋กœ์„ธ์Šค๋ฅผ ๊ด€๋ฆฌํ•  ๊ฒฝ์šฐ ํŠน์ • ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋ช‡ ๋ฒˆ์งธ๋กœ ์‹คํ–‰๋˜๋Š”์ง€ ์•Œ์•„๋‚ด๊ธฐ
    1. ์‹คํ–‰ ๋Œ€๊ธฐ ํ(Queue)์—์„œ ๋Œ€๊ธฐ์ค‘์ธ ํ”„๋กœ์„ธ์Šค ํ•˜๋‚˜๋ฅผ ๊บผ๋ƒ…๋‹ˆ๋‹ค.
    2. ํ์— ๋Œ€๊ธฐ์ค‘์ธ ํ”„๋กœ์„ธ์Šค ์ค‘ ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋” ๋†’์€ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์žˆ๋‹ค๋ฉด ๋ฐฉ๊ธˆ ๊บผ๋‚ธ ํ”„๋กœ์„ธ์Šค๋ฅผ ๋‹ค์‹œ ํ์— ๋„ฃ์Šต๋‹ˆ๋‹ค.
    3. ๋งŒ์•ฝ ๊ทธ๋Ÿฐ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์—†๋‹ค๋ฉด ๋ฐฉ๊ธˆ ๊บผ๋‚ธ ํ”„๋กœ์„ธ์Šค๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.
      1. ํ•œ ๋ฒˆ ์‹คํ–‰ํ•œ ํ”„๋กœ์„ธ์Šค๋Š” ๋‹ค์‹œ ํ์— ๋„ฃ์ง€ ์•Š๊ณ  ๊ทธ๋Œ€๋กœ ์ข…๋ฃŒ๋ฉ๋‹ˆ๋‹ค.
  • ํ˜„์žฌ ์‹คํ–‰ ๋Œ€๊ธฐ ํ์— ์žˆ๋Š” ํ”„๋กœ์„ธ์Šค์˜ ์ค‘์š”๋„๊ฐ€ ์ˆœ์„œ๋Œ€๋กœ ๋‹ด๊ธด ๋ฐฐ์—ด priorities์™€, ๋ช‡ ๋ฒˆ์งธ๋กœ ์‹คํ–‰๋˜๋Š”์ง€ ์•Œ๊ณ ์‹ถ์€ ํ”„๋กœ์„ธ์Šค์˜ ์œ„์น˜๋ฅผ ์•Œ๋ ค์ฃผ๋Š” location์ด ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ฃผ์–ด์งˆ ๋•Œ, ํ•ด๋‹น ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋ช‡ ๋ฒˆ์งธ๋กœ ์‹คํ–‰๋˜๋Š”์ง€ return ํ•˜๋„๋ก solution ํ•จ์ˆ˜๋ฅผ ์ž‘์„ฑํ•˜์„ธ์š”.

 

๐Ÿ‘€ ์˜ˆ์ œ

priorities location return
[2, 1, 3, 2] 2 1
[1, 1, 9, 1, 1, 1] 0 5

 

 

โœ๏ธ ํ’€์ด ์ˆœ์„œ

  1. ์šฐ์„ ์ˆœ์œ„ ํ ์„ ์–ธ (๋‚ด๋ฆผ์ฐจ์ˆœ)
  2. ์šฐ์„ ์ˆœ์œ„ ํ์— priorities ์š”์†Œ ์ถ”๊ฐ€
  3. ํ๊ฐ€ ๋นŒ ๋•Œ๊นŒ์ง€ ์šฐ์„ ์ˆœ์œ„ ํ๋ฅผ ์ˆœํšŒํ•˜๋ฉด์„œ location์˜ ์œ„์น˜ ์ฐพ๊ธฐ
  4. ํ˜„์žฌ ์ž‘์—…์ด location๊ณผ ๊ฐ™์œผ๋ฉด ๋ฐ˜ํ™˜

 

๐Ÿ’ป ์ฝ”๋“œ

import java.util.*;

class Solution {
    public int solution(int[] priorities, int location) {
        
        PriorityQueue<Integer> queue = new PriorityQueue<>(Collections.reverseOrder());
        
        for (int num: priorities) {
            queue.offer(num);
        }
        
        int answer = 0;
        while (!queue.isEmpty()) {
            for (int i = 0; i < priorities.length; i++) {
                if (queue.peek() == priorities[i]) {
                    queue.poll();
                    answer++;
                    
                    if (location == i) {
                        return answer;
                    }
                }
            }
        }
        return answer;
    }
}

 

 


๐Ÿ“PriorityQueue

  • ๋“ค์–ด๊ฐ€๋Š” ์ˆœ์„œ์™€ ์ƒ๊ด€์—†์ด ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋†’์€ ๋ฐ์ดํ„ฐ๊ฐ€ ๋จผ์ € ๋‚˜๊ฐ€๋Š” ๊ตฌ์กฐ
  • ์ผ๋ฐ˜์ ์ธ ํ๋Š” ๋จผ์ € ๋“ค์–ด๊ฐ„ ๋ฐ์ดํ„ฐ๊ฐ€ ๋จผ์ € ๋‚˜๊ฐ€๋Š” FIFO ๊ตฌ์กฐ
// ์ž‘์€ ์ˆซ์ž๊ฐ€ ๋จผ์ € ๋‚˜์˜ด (๊ธฐ๋ณธํ˜•)
PriorityQueue<Integer> queue = new PriorityQueue<>();

// ํฐ ์ˆซ์ž๊ฐ€ ๋จผ์ € ๋‚˜์˜ด
PriorityQueue<Integer> queue = newn PriorityQueue<>(Collections.reverseOrder());

 

 

๋ฉ”์†Œ๋“œ

add() ์šฐ์„ ์ˆœ์œ„ ํ์— ์›์†Œ๋ฅผ ์ถ”๊ฐ€
(์ €์žฅ ๊ณต๊ฐ„์ด ๋ถ€์กฑํ•˜๋ฉด ์—๋Ÿฌ ๋ฐœ์ƒ)
offer() ์šฐ์„ ์ˆœ์œ„ ํ์— ์›์†Œ ์ถ”๊ฐ€
(์ถ”๊ฐ€ ์‹คํŒจ์‹œ false ๋ฐ˜ํ™˜)
poll() ์šฐ์„ ์ˆœ์œ„ ํ์—์„œ ์ฒซ ๋ฒˆ์งธ ๊ฐ’ ๋ฐ˜ํ™˜ (์ €์žฅ๋œ ๊ฐ’ ์‚ญ์ œ) / ๋น„์—ˆ์œผ๋ฉด null
remove() ์šฐ์„ ์ˆœ์œ„ ํ์—์„œ ์ฒซ ๋ฒˆ์งธ ๊ฐ’ ๋ฐ˜ํ™˜ (์ €์žฅ๋œ ๊ฐ’ ์‚ญ์ œ) / ๋น„์—ˆ์œผ๋ฉด ์—๋Ÿฌ ๋ฐœ์ƒ
isEmpty() ์šฐ์„ ์ˆœ์œ„ ํ์— ๊ฐ’์ด ์žˆ์œผ๋ฉด false, ์—†์œผ๋ฉด true ๋ฐ˜ํ™˜
clear() ์šฐ์„ ์ˆœ์œ„ ํ ์ดˆ๊ธฐํ™”
size() ์šฐ์„ ์ˆœ์œ„ ํ์˜ ์›์†Œ ์ˆ˜ ๋ฐ˜ํ™˜

 

 

 


๐Ÿ“šReference

https://kbj96.tistory.com/49

https://ittrue.tistory.com/528

728x90
Comments