๊ธฐ๋ก๋ฐฉ

Lv.2 : ํ”„๋กœ์„ธ์Šค ๋ณธ๋ฌธ

CodingTest/Java

Lv.2 : ํ”„๋กœ์„ธ์Šค

Soom_1n 2023. 11. 3. 09:36

๐Ÿ‘‰ ๋ฌธ์ œ๋งํฌ

 

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

์ฝ”๋“œ ์ค‘์‹ฌ์˜ ๊ฐœ๋ฐœ์ž ์ฑ„์šฉ. ์Šคํƒ ๊ธฐ๋ฐ˜์˜ ํฌ์ง€์…˜ ๋งค์นญ. ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค์˜ ๊ฐœ๋ฐœ์ž ๋งž์ถคํ˜• ํ”„๋กœํ•„์„ ๋“ฑ๋กํ•˜๊ณ , ๋‚˜์™€ ๊ธฐ์ˆ  ๊ถํ•ฉ์ด ์ž˜ ๋งž๋Š” ๊ธฐ์—…๋“ค์„ ๋งค์นญ ๋ฐ›์œผ์„ธ์š”.

programmers.co.kr



๐Ÿ”ธ ๋ฌธ์ œ ๋ถ„์„ ๐Ÿ”ธ

  • ํ์—์„œ ์•ž ์›์†Œ๋ฅผ ๊บผ๋‚ธ๋‹ค. (poll)
  • ๊บผ๋‚ธ ์›์†Œ๋ณด๋‹ค ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋” ๋†’์€ ์›์†Œ๊ฐ€ ์žˆ๋‹ค๋ฉด, ๊บผ๋‚ธ ์›์†Œ๋ฅผ ๋‹ค์‹œ ํ์— ๋„ฃ๋Š”๋‹ค. (add)
  • ์šฐ์„ ์ˆœ์œ„๋Œ€๋กœ ์›์†Œ๋ฅผ ๊บผ๋‚ด๋‹ค๊ฐ€ ์ฒ˜์Œ ์œ„์น˜๊ฐ€ location์ธ ์›์†Œ๊ฐ€ ๋‚˜์˜ฌ ๋•Œ์˜ ๊บผ๋‚ธ ์›์†Œ ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

๐Ÿ”ธ ๋ฌธ์ œ ํ’€์ด ๐Ÿ”ธ

  • ์›์†Œ๋“ค์˜ ์šฐ์„ ์ˆœ์œ„์™€ ์ฒ˜์Œ ์œ„์น˜๋ฅผ ๊ธฐ์–ตํ•˜๊ธฐ์œ„ํ•ด ๋‘ ์š”์†Œ๋ฅผ ๋‹ด์€ ํด๋ž˜์Šค Process๋ฅผ ๋งŒ๋“ค์–ด Queue์— ์ €์žฅํ•œ๋‹ค.
  • ์šฐ์„ ์ˆœ์œ„๋Œ€๋กœ ๊บผ๋‚ด๊ธฐ ์œ„ํ•ด PriorityQueue์— ์›์†Œ๋ฅผ ์ €์žฅํ•œ๋‹ค.
  • ์šฐ์„ ์ˆœ์œ„ ํ์— ๋‚˜์˜จ ์›์†Œ์™€ ๊ฐ™์€ ์›์†Œ๊ฐ€ ๋‚˜์˜ฌ ๋•Œ ๊นŒ์ง€ ์ผ๋ฐ˜ ํ์—์„œ ์›์†Œ๋ฅผ ๊บผ๋‚ธ๋‹ค.
  • ๊บผ๋‚ธ ์›์†Œ์˜ ์ฒ˜์Œ ์œ„์น˜๊ฐ€ location๊ณผ ๊ฐ™๋‹ค๋ฉด ํ˜„์žฌ๊นŒ์ง€ ์šฐ์„ ์ˆœ์œ„ ํ์—์„œ ๊บผ๋‚ธ ์›์†Œ๋“ค์˜ ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

๐Ÿ”ธ ์ฝ”๋“œ ๐Ÿ”ธ

import java.util.Queue;
import java.util.PriorityQueue;
import java.util.ArrayDeque;
import java.util.Collections;

class Solution {
    private class Process {
        private int priority;
        private int seq;

        public Process(int priority, int seq) {
            this.priority = priority;
            this.seq = seq;
        }
    }

    public int solution(int[] priorities, int location) {
        Queue<Process> que = new ArrayDeque<>();
        PriorityQueue<Integer> pq = new PriorityQueue<>(Collections.reverseOrder());

        for (int i = 0; i < priorities.length; i++) {
            pq.add(priorities[i]);
            que.add(new Process(priorities[i], i));
        }

        for (int i = 1; i <= priorities.length; i++) {

            int target = pq.poll();

            Process process = que.poll();
            while(process.priority != target) {
                que.add(process);
                process = que.poll();
            }

            if (process.seq == location)
                return i;
        }

        return -1;
    }
}

 

๐Ÿ”ธ ์ฝ”๋“œ ํ•ด์„ ๐Ÿ”ธ

  • ์šฐ์„ ์ˆœ์œ„์™€ ์ดˆ๊ธฐ ์œ„์น˜๋ฅผ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•ด Process ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ค์–ด ์‚ฌ์šฉํ–ˆ๋‹ค.
  • ์šฐ์„ ์ˆœ์œ„๋ฅผ ๋‹ด์€ intํ˜• ๋ฐฐ์—ด priorites๋ฅผ ์ผ๋ฐ˜ ํ์™€ ์šฐ์„ ์ˆœ์œ„ ํ์— ๊ฐ๊ฐ ๋ณต์‚ฌํ•ด ์ €์žฅํ•œ๋‹ค.
  • ์šฐ์„ ์ˆœ์œ„ ํ์—์„œ ๋‚˜์˜จ ์›์†Œ๊ฐ€ ์ผ๋ฐ˜ ํ์—์„œ ๋‚˜์˜ฌ ๋•Œ ๊นŒ์ง€ ๋ฌธ์ œ์˜ ๊ณ„์‚ฐ์„ ๋ฐ˜๋ณตํ•œ๋‹ค.
  • ๊บผ๋‚ธ ์›์†Œ์˜ ์ดˆ๊ธฐ ์œ„์น˜๊ฐ€ location๊ณผ ๊ฐ™๋‹ค๋ฉด ํ˜„์žฌ ์šฐ์„  ์ˆœ์œ„ ํ์—์„œ ๊บผ๋‚ธ ์›์†Œ์˜ ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

๐Ÿ”ธ end ๐Ÿ”ธ

  • ์ฒซ ํ’€์ด์—์„œ๋Š” ์šฐ์„ ์ˆœ์œ„ ํ๋งŒ ๋‘๊ณ , Process ํด๋ž˜์Šค์— Comparable์„ ๋„ฃ์–ด ์‚ฌ์šฉํ–ˆ๋‹ค.
    • ์˜ˆ์ œ๋Š” ํ†ต๊ณผํ–ˆ์ง€๋งŒ, ๋ฌธ์ œ์˜ 1๋ฒˆ๊ณผ 2๋ฒˆ ์กฐ๊ฑด์—์„œ ๊บผ๋‚ธ ์›์†Œ๋ฅผ ๋‹ค์‹œ ๋„ฃ๋Š” ์ž‘์—…์ด ์—†์–ด์„œ ์‹คํ–‰ ์‹คํŒจํ–ˆ๋‹ค.
    • ์•„๋งˆ ์˜ˆ์ œ๋Š” ์šฐ์„ ์ˆœ์œ„ ํ๋กœ ๋Œ๋ ค์„œ๋„ ๋˜๋„๋ก ํ•จ์ •์„ ํŒŒ๋†“์€ ๊ฒƒ ๊ฐ™๋‹ค.
  • ๋‹ค๋ฅธ ์ฝ”๋“œ๋ฅผ ๋ณด๋‹ˆ ์šฐ์„ ์ˆœ์œ„ ํ ๋Œ€์‹  ์ผ๋ฐ˜ ์ •๋ ฌ์„ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜, ์ผ๋ฐ˜ ํ๋„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  location ๊ฐ’์„ ์˜ฎ๊ฒจ๊ฐ€๋ฉฐ ์ธ๋ฑ์Šค ์›€์ง์ž„์œผ๋กœ ํ๋ฅผ ๋Œ€์‹ ํ•˜๋Š” ๋ฐฉ์‹์˜ ํ’€์ด๊ฐ€ ์žˆ์—ˆ๋‹ค.
    • ์ •๋ ฌ๋„ 1๋ฒˆ ์ผ์–ด๋‚˜๊ธฐ ๋•Œ๋ฌธ์— ์ผ๋ฐ˜ ์ •๋ ฌ๋„ ํšจ์œจ์ด ๋น„์Šทํ•  ๊ฒƒ ๊ฐ™๊ณ , ํ ๋Œ€์‹  location์„ ์›€์ง์ด๋Š”๊ฑด ์ดˆ๊ธฐ ์œ„์น˜๋ฅผ ๊ธฐ์–ตํ•˜์ง€ ์•Š์•„๋„ ๋˜์„œ ๋ฉ”๋ชจ๋ฆฌ์™€ ํšจ์œจ ๋ชจ๋‘ ์ฑ™๊ธธ ์ˆ˜ ์žˆ๋Š” ์ข‹์€ ์†”๋ฃจ์…˜ ๊ฐ™๋‹ค.

728x90