๊ด€๋ฆฌ ๋ฉ”๋‰ด

Welcome! Everything is fine.

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค/Lv.1] ๋ช…์˜ˆ์˜ ์ „๋‹น(1) - Java ๋ณธ๋ฌธ

์นดํ…Œ๊ณ ๋ฆฌ ์—†์Œ

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค/Lv.1] ๋ช…์˜ˆ์˜ ์ „๋‹น(1) - Java

๊ฐœ๋ฐœ๊ณฐ๋ฐœ 2024. 4. 15.
728x90

๐Ÿ“Œ ๋ฌธ์ œ

 

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

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

programmers.co.kr

๐Ÿ“Œ ํ’€์ด - ๋ฐฐ์—ด ์‚ฌ์šฉ

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

๋ฐฐ์—ด ์‚ฌ์šฉ(์™ผ) / ์šฐ์„ ์ˆœ์œ„ ํ ์‚ฌ์šฉ(์˜ค)

 

๋‚ด๊ฐ€ ์ฒ˜์Œ ์ž‘์„ฑํ•œ ๋‹ต์•ˆ์€ ๋ฐฐ์—ด๊ณผ ์ •๋ ฌ์„ ์ด์šฉํ•˜์˜€๋‹ค. ๋จผ์ € ๋ช…์˜ˆ์˜ ์ „๋‹น์— ๋“ค์–ด๊ฐ€๋Š” ์ ์ˆ˜๋ฅผ ์ €์žฅํ•˜๋Š” hallOfFameScores ๋ฐฐ์—ด๊ณผ ๋ช…์˜ˆ์˜ ์ „๋‹น์˜ ์ตœํ•˜์œ„ ์ ์ˆ˜๋ฅผ ์ €์žฅํ•˜๋Š” answer ๋ฐฐ์—ด์„ ๋งŒ๋“ค์—ˆ๋‹ค.

 

๊ทธ๋ฆฌ๊ณ ๋‚˜์„œ score ๋ฐฐ์—ด์„ ๋Œ๋ฉฐ ๋‹ค์Œ 2๊ฐ€์ง€์˜ ์กฐ๊ฑด์— ๋”ฐ๋ผ ๋ฐฐ์—ด์ด ์ฑ„์›Œ์ง„๋‹ค.

  • i๊ฐ€ k๋ณด๋‹ค ์ž‘์„ ๊ฒฝ์šฐ(๋ชจ๋“  ์ถœ์—ฐ ๊ฐ€์ˆ˜์˜ ์ ์ˆ˜๊ฐ€ ๋ช…์˜ˆ์˜ ์ „๋‹น์— ์˜ค๋ฅด๋Š” ๊ฒฝ์šฐ)
    • ๋ช…์˜ˆ์˜ ์ „๋‹น 0๋ฒˆ์งธ์— ์ ์ˆ˜๋ฅผ ๋„ฃ๋Š”๋‹ค.
    • ๋ช…์˜ˆ์˜ ์ „๋‹น์— ๋“ค์–ด๊ฐ„ ์ ์ˆ˜๋ฅผ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•œ๋‹ค.
    • ๊ฒฐ๊ณผ ๋ฐฐ์—ด์— ๋ช…์˜ˆ์˜ ์ „๋‹น์˜ ์ ์ˆ˜๋ฅผ ๋’ค์—์„œ๋ถ€ํ„ฐ ๊ฐ€์ ธ์™€ ๋„ฃ๋Š”๋‹ค.
  • i๊ฐ€ k๋ณด๋‹ค ํด ๊ฒฝ์šฐ(๋ช…์˜ˆ์˜ ์ „๋‹น k๋ฒˆ์งธ ์ ์ˆ˜๋ณด๋‹ค ์ ์ˆ˜๊ฐ€ ๋†’์€ ์‚ฌ๋žŒ์ด ๋ช…์˜ˆ์˜ ์ „๋‹น์— ์˜ค๋ฅด๋Š” ๊ฒฝ์šฐ)
    • ์ ์ˆ˜๊ฐ€ ๋ช…์˜ˆ์˜ ์ „๋‹น 0๋ฒˆ์งธ ์ ์ˆ˜(์ œ์ผ ๋‚ฎ์€ ์ ์ˆ˜)๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™์œผ๋ฉด ํ•ด๋‹น ์ ์ˆ˜๋ฅผ 0๋ฒˆ์งธ ๋ฐฐ์—ด์— ๋„ฃ๋Š”๋‹ค.
    • ๋ช…์˜ˆ์˜ ์ „๋‹น์— ๋“ค์–ด๊ฐ„ ์ ์ˆ˜๋ฅผ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•œ๋‹ค.
    • ๊ฒฐ๊ณผ ๋ฐฐ์—ด์— ๋ช…์˜ˆ์˜ ์ „๋‹น์˜ 0๋ฒˆ์งธ ์ ์ˆ˜๋ฅผ ๋„ฃ๋Š”๋‹ค.
for (int i = 0; i < score.length; i++) {
    if (i < k) {
        hallOfFameScores[0] = score[i];
        Arrays.sort(hallOfFameScores);
        answer[i] = hallOfFameScores[k-i-1];
    } else {
        if (score[i] >= hallOfFameScores[0]) hallOfFameScores[0] = score[i];
        Arrays.sort(hallOfFameScores);
        answer[i] = hallOfFameScores[0];
    }
}

๐Ÿ“Œ ํ’€์ด - ์šฐ์„  ์ˆœ์œ„ ํ ์‚ฌ์šฉ

์šฐ์„ ์ˆœ์œ„ ํ๋ฅผ ์‚ฌ์šฉํ•˜๋‹ˆ ๋ฐฐ์—ด๋ณด๋‹ค ๊ฐ„๋‹จํ•˜๊ฒŒ ํ’€ ์ˆ˜ ์žˆ์—ˆ๋‹ค. ์šฐ์„  ์ˆœ์œ„ ํ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ๋‚ฎ์€ ์ˆซ์ž ์ˆœ์œผ๋กœ ์ •๋ ฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ด๋ฒˆ ๋ฌธ์ œ์—์„œ๋Š” ๊ทธ๋ƒฅ ์„ ์–ธํ•ด์„œ ์ด์šฉํ•˜๋ฉด ๋œ๋‹ค. ๋งŒ์•ฝ ๋†’์€ ์ˆซ์ž๋ฅผ ์šฐ์„  ์ˆœ์œ„๋กœ ๋‘๋ ค๋ฉด ์•„๋ž˜์™€ ๊ฐ™์ด ์„ ์–ธํ•  ๋•Œ Collections.reverseOrder()๋ฅผ ์ถ”๊ฐ€ํ•ด์ฃผ๋ฉด ๋œ๋‹ค.

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

 

์šฐ์„  ์ˆœ์œ„๋Œ€๋กœ ๋‚˜์˜ค๊ธฐ ๋•Œ๋ฌธ์— ์ด๋ ‡๊ฒŒ ๊ฐ„๋‹จํ•˜๊ฒŒ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.

for(int i = 0; i < score.length; i++){
    pq.add(score[i]);
    if(pq.size() > k) pq.poll();
    answer[i] = pq.peek();
}

๐Ÿ“Œ ์ „์ฒด ์ฝ”๋“œ

๋ฐฐ์—ด์„ ์ด์šฉํ•œ ํ’€์ด

import java.util.*;

class Solution {
    public int[] solution(int k, int[] score) {
        int[] answer = new int[score.length];
        int[] hallOfFameScores = new int[k];
        
        for (int i = 0; i < score.length; i++) {
            if (i < k) {
                hallOfFameScores[0] = score[i];
                Arrays.sort(hallOfFameScores);
                answer[i] = hallOfFameScores[k-i-1];
            } else {
                if (score[i] >= hallOfFameScores[0]) hallOfFameScores[0] = score[i];
                Arrays.sort(hallOfFameScores);
                answer[i] = hallOfFameScores[0];
            }
    }
        
        return answer;
    }
}

 

์šฐ์„  ์ˆœ์œ„ ํ๋ฅผ ์ด์šฉํ•œ ํ’€์ด

import java.util.*;

class Solution {
    public int[] solution(int k, int[] score) {
        int[] answer = new int[score.length];
        PriorityQueue<Integer> pq = new PriorityQueue<>();
        
        for(int i = 0; i < score.length; i++){
            pq.add(score[i]);
            if(pq.size() > k) pq.poll();
            answer[i] = pq.peek();
        }

        return answer;
    }
}