๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๊ฐœ๋ฐœ/์ž๋ฃŒ๊ตฌ์กฐ & ์•Œ๊ณ ๋ฆฌ์ฆ˜

ํ”„๋ฆฐํ„ฐ (Java)

by 1mj 2022. 1. 16.

https://programmers.co.kr/learn/courses/30/lessons/42587

 

์ฝ”๋”ฉํ…Œ์ŠคํŠธ ์—ฐ์Šต - ํ”„๋ฆฐํ„ฐ

์ผ๋ฐ˜์ ์ธ ํ”„๋ฆฐํ„ฐ๋Š” ์ธ์‡„ ์š”์ฒญ์ด ๋“ค์–ด์˜จ ์ˆœ์„œ๋Œ€๋กœ ์ธ์‡„ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ์ค‘์š”ํ•œ ๋ฌธ์„œ๊ฐ€ ๋‚˜์ค‘์— ์ธ์‡„๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฐ ๋ฌธ์ œ๋ฅผ ๋ณด์™„ํ•˜๊ธฐ ์œ„ํ•ด ์ค‘์š”๋„๊ฐ€ ๋†’์€ ๋ฌธ์„œ๋ฅผ ๋จผ์ € ์ธ์‡„ํ•˜๋Š” ํ”„๋ฆฐ

programmers.co.kr

 

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ์ฝ”๋”ฉํ…Œ์ŠคํŠธ ๊ณ ๋“์  Kit ํ”„๋ฆฐํ„ฐ ๋ฌธ์ œ ํ’€์ด์ด๋‹ค.

 

๊ฐ„๋‹จํ•˜๊ฒŒ ๋ฆฌ์ŠคํŠธ๋งŒ ์ด์šฉํ•˜์—ฌ location์˜ ์ธ๋ฑ์Šค๋ฅผ ๋ฐ”๊พธ์–ด์ค„ ์ƒ๊ฐ์œผ๋กœ ํ’€์–ด๋ดค๋Š”๋ฐ ์ด๋ฏธ ์ธ์‡„๋˜๋Š” ๊ฐ’๊นŒ์ง€ ์ €์žฅํ•˜๊ณ  ๊ณ„์‚ฐํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์–ด๋ ค์› ๊ณ  ์ค‘์š”๋„ ๋ฐฐ์—ด๋งŒํผ ๋ฐ˜๋ณตํ•˜๋ฉด ์•ˆ ๋˜๋Š” ๊ฒƒ์„ ๊นจ๋‹ซ๊ณ  ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์„ ์ƒ๊ฐํ•ด๋ดค๋‹ค.

 

์†์œผ๋กœ ์ง์ ‘ ๊ฐ’ ๋ณ€๊ฒฝ ๋‹จ๊ณ„๋ฅผ ์ ์–ด๋ณด๋‹ค๊ฐ€ ์ดˆ๊ธฐ ๋ฐฐ์—ด ์ˆœ์„œ์™€ ์ตœ์ข… ๋ฐฐ์—ด ์ˆœ์„œ๋ฅผ ๋น„๊ตํ•ด์„œ ํ’€ ์ˆ˜ ์žˆ๊ฒ ๋‹ค๋Š” ์ƒ๊ฐ๊นŒ์ง€๋Š” ํ–ˆ๋Š”๋ฐ ์ตœ์ข… ๋ฐฐ์—ด ์ˆœ์„œ๊ฐ€ ๊ฐ„๋‹จํ•œ ์ •๋ ฌ์ด ์•„๋‹Œ ๊ฐ’์ด ๊ฐ™์€ ๊ฒฝ์šฐ ์ฒ˜๋ฆฌ๋„ ํ•„์š”ํ•ด์„œ ๋‹ค๋ฅธ ๋ถ„๋“ค์˜ ํ’€์ด๋ฅผ ์ผ๋ถ€ ์ฐธ์กฐํ–ˆ๋‹ค.

 

์šฐ์„ ์ˆœ์œ„ ํ๋ฅผ ์จ๋ณด์ง€ ์•Š์•„์„œ ๋ชฐ๋ž๋Š”๋ฐ ์šฐ์„ ์ˆœ์œ„ ํ๋ฅผ ์ด์šฉํ•˜๋ฉด ์•„์ฃผ ๊ฐ„๋‹จํ•˜๊ฒŒ ํ’€ ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ์˜€๋‹ค.

์šฐ์„ ์ˆœ์œ„ ํ๋ฅผ ์ด์šฉํ•˜์—ฌ ์ตœ์ข… ๋ฐฐ์—ด ์ˆœ์„œ๋ฅผ ๊ตฌํ•˜๊ณ  ์ฒซ ๋ฒˆ์งธ ์š”์†Œ์™€ ๊ธฐ์กด ๋ฐฐ์—ด ์ˆœ์„œ๋ฅผ ๋น„๊ตํ•˜์—ฌ ๋จผ์ € ์ธ์‡„๋˜๋Š” ๋ฌธ์„œ ๊ฐœ์ˆ˜๋ฅผ ๋”ํ•ด์ฃผ๋Š” ๋ฐฉ์‹์œผ๋กœ ์ ‘๊ทผํ•˜๋ฉด ๋œ๋‹ค.

 

import java.util.*;

class Solution {
    public int solution(int[] priorities, int location) {
        // ํฐ ์ˆซ์ž๊ฐ€ ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋˜๋„๋ก ์šฐ์„ ์ˆœ์œ„ ํ ์ƒ์„ฑ
        PriorityQueue<Integer> queue = new PriorityQueue<>(Collections.reverseOrder());
        // ์šฐ์„ ์ˆœ์œ„ ํ์— ์ค‘์š”๋„๊ฐ€ ๋‹ด๊ธด ๋ฐฐ์—ด ์ˆœ์„œ๋กœ ๋„ฃ์œผ๋ฉด ์ž๋™์œผ๋กœ ์ •๋ ฌ์ด ๋จ
        // ex) [2, 1, 3, 2] -> [3, 2, 2, 1]
        for (int data : priorities) {
            queue.add(data);
        }
        
        int answer = 1;
        while (!queue.isEmpty()) {
            // ์šฐ์„ ์ˆœ์œ„ ํ์˜ ์ฒซ ๋ฒˆ์งธ ์š”์†Œ๋ž‘ ๊ธฐ์กด ์ค‘์š”๋„ ๋ชฉ๋ก ๋ฐฐ์—ด๊ณผ ๋น„๊ต
            for (int i = 0; i < priorities.length; i++) {
                if (priorities[i] == queue.peek()) {
                    // ๊ตฌํ•ด์•ผ ํ•˜๋Š” ๊ฐ’์ด๋ฉด ๋”ํ•ด์ง„ ์ˆœ์„œ ๋ฆฌํ„ด
                    if (i == location) {
                        return answer;
                    }
                    // ๊ตฌํ•ด์•ผ ํ•˜๋Š” ๊ฐ’์ด ์•„๋‹ˆ๋ผ๋ฉด 
                    answer++;       // ๋จผ์ € ์ธ์‡„๋˜๋Š” ๋ฌธ์„œ ๋”ํ•˜๊ธฐ
                    queue.poll();   // ํ์—์„œ ๋นผ๊ธฐ
                }
            }
        }
        return answer;
    }
}

๋Œ“๊ธ€