Teddy Bear Holding A Heart Balloon [Lv.1] ๋ช…์˜ˆ์˜ ์ „๋‹น
๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๐Ÿฅ‡ Coding Test/์˜ค๋‹ต๋…ธํŠธ

[Lv.1] ๋ช…์˜ˆ์˜ ์ „๋‹น

https://school.programmers.co.kr/learn/courses/30/lessons/138477

 

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

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

programmers.co.kr

[ ๋ฌธ์ œ์„ค๋ช… ]

"๋ช…์˜ˆ์˜ ์ „๋‹น"์ด๋ผ๋Š” TV ํ”„๋กœ๊ทธ๋žจ์—์„œ๋Š” ๋งค์ผ 1๋ช…์˜ ๊ฐ€์ˆ˜๊ฐ€ ๋…ธ๋ž˜๋ฅผ ๋ถ€๋ฅด๊ณ , ์‹œ์ฒญ์ž๋“ค์˜ ๋ฌธ์ž ํˆฌํ‘œ์ˆ˜๋กœ ๊ฐ€์ˆ˜์—๊ฒŒ ์ ์ˆ˜๋ฅผ ๋ถ€์—ฌํ•ฉ๋‹ˆ๋‹ค. ๋งค์ผ ์ถœ์—ฐํ•œ ๊ฐ€์ˆ˜์˜ ์ ์ˆ˜๊ฐ€ ์ง€๊ธˆ๊นŒ์ง€ ์ถœ์—ฐ ๊ฐ€์ˆ˜๋“ค์˜ ์ ์ˆ˜ ์ค‘ ์ƒ์œ„ k๋ฒˆ์งธ ์ด๋‚ด์ด๋ฉด ํ•ด๋‹น ๊ฐ€์ˆ˜์˜ ์ ์ˆ˜๋ฅผ ๋ช…์˜ˆ์˜ ์ „๋‹น์ด๋ผ๋Š” ๋ชฉ๋ก์— ์˜ฌ๋ ค ๊ธฐ๋…ํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰ ํ”„๋กœ๊ทธ๋žจ ์‹œ์ž‘ ์ดํ›„ ์ดˆ๊ธฐ์— k์ผ๊นŒ์ง€๋Š” ๋ชจ๋“  ์ถœ์—ฐ ๊ฐ€์ˆ˜์˜ ์ ์ˆ˜๊ฐ€ ๋ช…์˜ˆ์˜ ์ „๋‹น์— ์˜ค๋ฅด๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. k์ผ ๋‹ค์Œ๋ถ€ํ„ฐ๋Š” ์ถœ์—ฐ ๊ฐ€์ˆ˜์˜ ์ ์ˆ˜๊ฐ€ ๊ธฐ์กด์˜ ๋ช…์˜ˆ์˜ ์ „๋‹น ๋ชฉ๋ก์˜ k๋ฒˆ์งธ ์ˆœ์œ„์˜ ๊ฐ€์ˆ˜ ์ ์ˆ˜๋ณด๋‹ค ๋” ๋†’์œผ๋ฉด, ์ถœ์—ฐ ๊ฐ€์ˆ˜์˜ ์ ์ˆ˜๊ฐ€ ๋ช…์˜ˆ์˜ ์ „๋‹น์— ์˜ค๋ฅด๊ฒŒ ๋˜๊ณ  ๊ธฐ์กด์˜ k๋ฒˆ์งธ ์ˆœ์œ„์˜ ์ ์ˆ˜๋Š” ๋ช…์˜ˆ์˜ ์ „๋‹น์—์„œ ๋‚ด๋ ค์˜ค๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

์ด ํ”„๋กœ๊ทธ๋žจ์—์„œ๋Š” ๋งค์ผ "๋ช…์˜ˆ์˜ ์ „๋‹น"์˜ ์ตœํ•˜์œ„ ์ ์ˆ˜๋ฅผ ๋ฐœํ‘œํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, k = 3์ด๊ณ , 7์ผ ๋™์•ˆ ์ง„ํ–‰๋œ ๊ฐ€์ˆ˜์˜ ์ ์ˆ˜๊ฐ€ [10, 100, 20, 150, 1, 100, 200]์ด๋ผ๋ฉด, ๋ช…์˜ˆ์˜ ์ „๋‹น์—์„œ ๋ฐœํ‘œ๋œ ์ ์ˆ˜๋Š” ์•„๋ž˜์˜ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด [10, 10, 10, 20, 20, 100, 100]์ž…๋‹ˆ๋‹ค.

๋ช…์˜ˆ์˜ ์ „๋‹น ๋ชฉ๋ก์˜ ์ ์ˆ˜์˜ ๊ฐœ์ˆ˜ k, 1์ผ๋ถ€ํ„ฐ ๋งˆ์ง€๋ง‰ ๋‚ ๊นŒ์ง€ ์ถœ์—ฐํ•œ ๊ฐ€์ˆ˜๋“ค์˜ ์ ์ˆ˜์ธ score๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ, ๋งค์ผ ๋ฐœํ‘œ๋œ ๋ช…์˜ˆ์˜ ์ „๋‹น์˜ ์ตœํ•˜์œ„ ์ ์ˆ˜๋ฅผ returnํ•˜๋Š” solution ํ•จ์ˆ˜๋ฅผ ์™„์„ฑํ•ด์ฃผ์„ธ์š”.

[ ํ’€์ด๊ณผ์ • ]

import java.util.*;

class Solution {
    public int[] solution(int k, int[] score) {
        int[] answer = new int[score.length];
        ArrayList<Integer> list = new ArrayList<>();
        //์ ์ˆ˜๋ฅผ ์ •๋ ฌํ•ด์ค„ list์„ ์–ธ
        
        for (int i=0; i<score.length; i++) {
            list.add(score[i]); //list์— ์ ์ˆ˜ ๋‹ด๊ธฐ
            Collections.sort(list); //list์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌ
            
            if (list.size()<=k) { //listํฌ๊ธฐ๊ฐ€ k๋ฒ”์œ„ ์•ˆ์— ์žˆ๋‹ค๋ฉด
                answer[i] = list.get(0); //list์˜ ์ฒซ๋ฒˆ์งธ ์›์†Œ ๋ฐ˜ํ™˜
            }
            else { //listํฌ๊ธฐ๊ฐ€ k๋ฒ”์œ„๋ฅผ ๋„˜๋Š”๋‹ค๋ฉด
                answer[i] = list.get(list.size()-k);
                //list์˜ ๋์—์„œ k๋ฒˆ์งธ ์›์†Œ ๋ฐ˜ํ™˜
            }
        }
        return answer;
    }
}

[ ๋‹ค๋ฅธํ’€์ด ]

import java.util.*;

class Solution {
    public int[] solution(int k, int[] score) {
        int[] answer = new int[score.length];

        PriorityQueue<Integer> priorityQueue = new PriorityQueue<>();
        //์šฐ์„ ์ˆœ์œ„ํ ์„ ์–ธ
        //์šฐ์„ ์ˆœ์œ„ํ = ๊ฐ€์žฅ ์ž‘์€๊ฐ’์ด ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋†’์€ ํ˜•ํƒœ

        for(int i = 0; i < score.length; i++) {
            priorityQueue.add(score[i]);
            
            if (priorityQueue.size() > k) { //ํ์˜ ์‚ฌ์ด์ฆˆ๊ฐ€ k๋ณด๋‹ค ์ปค์ง€๋ฉด
                priorityQueue.poll(); //์šฐ์„ ์ˆœ์œ„ ๊ฐ€์žฅ ๋†’์€ ๊ฐ’ ์ œ๊ฑฐ(๊ฐ€์žฅ ์ž‘์€๊ฐ’ ์ œ๊ฑฐ)
            }

            answer[i] = priorityQueue.peek();
            //์šฐ์„ ์ˆœ์œ„ ๊ฐ€์žฅ ๋†’์€ ๊ฐ’ ๋ฐ˜ํ™˜(๊ฐ€์žฅ ์ž‘์€๊ฐ’ ๋ฐ˜ํ™˜)
        }



        return answer;
    }
}

[ ๋ฌธ๋ฒ•์ •๋ฆฌ ]

1. PriorityQueue
์ผ๋ฐ˜์ ์ธ ํ์™€๋Š” ๋‹ฌ๋ฆฌ ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋†’์€ ์š”์†Œ(๊ฐ€์žฅ ์ž‘์€๊ฐ’)๊ฐ€ ๋จผ์ € ๋ฐ˜ํ™˜๋จ
.poll()

๊ฐ€์žฅ ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋†’์€ ์š”์†Œ ์ œ๊ฑฐ
.peek()
๊ฐ€์žฅ ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋†’์€ ์š”์†Œ ๋ฐ˜ํ™˜