Contents

๋” ๋งต๊ฒŒ (with.Java)

   Jun 7, 2024     5 min read

โ€œ๋” ๋งต๊ฒŒ (with.Java)โ€ ๋ฌธ์ œ์— ๋Œ€ํ•˜์—ฌ ์•Œ์•„๋ณธ ๊ธ€์ž…๋‹ˆ๋‹ค.

์ฝ”๋”ฉ ํ…Œ์ŠคํŠธ ๋ฌธ์ œ๋ฅผ ํ’€๋ฉฐ, ํ’€์—ˆ๋˜ ๋ฌธ์ œ์— ๋Œ€ํ•œ ํšŒ๊ณ ์™€ ๋‹ค๋ฅธ ํ’€์ด ๋ฐฉ๋ฒ•์„ ์•Œ์•„๋ณด๋ฉฐ, ์•Œ์•„๊ฐ€๊ณ ์ž ํ•ฉ๋‹ˆ๋‹ค.

๋ฌธ์ œ์— ๋Œ€ํ•ด ๋จผ์ € ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

๋ฌธ์ œ

๋งค์šด ๊ฒƒ์„ ์ข‹์•„ํ•˜๋Š” Leo๋Š” ๋ชจ๋“  ์Œ์‹์˜ ์Šค์ฝ”๋นŒ ์ง€์ˆ˜๋ฅผ K ์ด์ƒ์œผ๋กœ ๋งŒ๋“ค๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

๋ชจ๋“  ์Œ์‹์˜ ์Šค์ฝ”๋นŒ ์ง€์ˆ˜๋ฅผ K ์ด์ƒ์œผ๋กœ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด Leo๋Š” ์Šค์ฝ”๋นŒ ์ง€์ˆ˜๊ฐ€ ๊ฐ€์žฅ ๋‚ฎ์€ ๋‘ ๊ฐœ์˜ ์Œ์‹์„ ์•„๋ž˜์™€ ๊ฐ™์ด ํŠน๋ณ„ํ•œ ๋ฐฉ๋ฒ•์œผ๋กœ ์„ž์–ด ์ƒˆ๋กœ์šด ์Œ์‹์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

์„ž์€ ์Œ์‹์˜ ์Šค์ฝ”๋นŒ ์ง€์ˆ˜ = ๊ฐ€์žฅ ๋งต์ง€ ์•Š์€ ์Œ์‹์˜ ์Šค์ฝ”๋นŒ ์ง€์ˆ˜ + (๋‘ ๋ฒˆ์งธ๋กœ ๋งต์ง€ ์•Š์€ ์Œ์‹์˜ ์Šค์ฝ”๋นŒ ์ง€์ˆ˜ * 2)

Leo๋Š” ๋ชจ๋“  ์Œ์‹์˜ ์Šค์ฝ”๋นŒ ์ง€์ˆ˜๊ฐ€ K ์ด์ƒ์ด ๋  ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณตํ•˜์—ฌ ์„ž์Šต๋‹ˆ๋‹ค.

Leo๊ฐ€ ๊ฐ€์ง„ ์Œ์‹์˜ ์Šค์ฝ”๋นŒ ์ง€์ˆ˜๋ฅผ ๋‹ด์€ ๋ฐฐ์—ด scoville๊ณผ ์›ํ•˜๋Š” ์Šค์ฝ”๋นŒ ์ง€์ˆ˜ K๊ฐ€ ์ฃผ์–ด์งˆ ๋•Œ, ๋ชจ๋“  ์Œ์‹์˜ ์Šค์ฝ”๋นŒ ์ง€์ˆ˜๋ฅผ K ์ด์ƒ์œผ๋กœ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ์„ž์–ด์•ผ ํ•˜๋Š” ์ตœ์†Œ ํšŸ์ˆ˜๋ฅผ return ํ•˜๋„๋ก solution ํ•จ์ˆ˜๋ฅผ ์ž‘์„ฑํ•ด์ฃผ์„ธ์š”.

์ œํ•œ์‚ฌํ•ญ

  • scoville์˜ ๊ธธ์ด๋Š” 2 ์ด์ƒ 1,000,000 ์ดํ•˜์ž…๋‹ˆ๋‹ค.
  • K๋Š” 0 ์ด์ƒ 1,000,000,000 ์ดํ•˜์ž…๋‹ˆ๋‹ค.
  • scoville์˜ ์›์†Œ๋Š” ๊ฐ๊ฐ 0 ์ด์ƒ 1,000,000 ์ดํ•˜์ž…๋‹ˆ๋‹ค.
  • ๋ชจ๋“  ์Œ์‹์˜ ์Šค์ฝ”๋นŒ ์ง€์ˆ˜๋ฅผ K ์ด์ƒ์œผ๋กœ ๋งŒ๋“ค ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ์—๋Š” -1์„ return ํ•ฉ๋‹ˆ๋‹ค.

์ž…์ถœ๋ ฅ ์˜ˆ์‹œ

scovilleKreturn
[1, 2, 3, 9, 10, 12]72

๋ฌธ์ œ์— ๋Œ€ํ•œ ๋‚˜์˜ ํ’€์ด

import java.util.PriorityQueue;

class Solution {
    public int solution(int[] scoville, int K) {
        PriorityQueue<Integer> que = new PriorityQueue<>();
        for(int i : scoville){
            que.add(i);
        }

        int answer = 0;
        while(que.peek() < K){
            que.add(que.poll() + (que.poll() * 2));
            answer++;
            if(que.size() == 1 && que.peek() < K){
                return -1;
            }
        }

        return answer;
    }
}

ํ’€์ด ๋ฆฌ๋ทฐ

solution ๋ฉ”์„œ๋“œ๋Š” ๋‘ ๊ฐœ์˜ ๋ฐฐ์—ด progresses์™€ speeds๋ฅผ ์ž…๋ ฅ์œผ๋กœ ๋ฐ›์Šต๋‹ˆ๋‹ค.

์ž‘์—…์˜ ์ง„ํ–‰ ์ƒํ™ฉ๊ณผ ์†๋„๋ฅผ ์ด์šฉํ•˜์—ฌ ๊ฐ ์ž‘์—…์ด ์™„๋ฃŒ๋˜๋Š” ๋ฐ ํ•„์š”ํ•œ ์ผ ์ˆ˜๋ฅผ ๊ณ„์‚ฐํ•ฉ๋‹ˆ๋‹ค.

Queue ๊ฐ์ฒด que๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ๊ฐ ์ž‘์—…์˜ ์™„๋ฃŒ๊นŒ์ง€ ๊ฑธ๋ฆฌ๋Š” ์ผ ์ˆ˜๋ฅผ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.

์ฒซ ๋ฒˆ์งธ for ๋ฃจํ”„๋ฅผ ํ†ตํ•ด ๊ฐ ์ž‘์—…์— ๋Œ€ํ•ด ํ•„์š”ํ•œ ์ผ ์ˆ˜๋ฅผ ๊ณ„์‚ฐํ•˜๊ณ , ์ด๋ฅผ que์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. ๋งŒ์•ฝ ์†๋„์— ๋”ฐ๋ผ ์ž‘์—… ์™„๋ฃŒ๊นŒ์ง€ ๊ฑธ๋ฆฌ๋Š” ์ผ ์ˆ˜๊ฐ€ ์†Œ์ˆ˜์ ์œผ๋กœ ๋‚˜๋ˆ„์–ด ๋–จ์–ด์ง€์ง€ ์•Š์œผ๋ฉด ์˜ฌ๋ฆผํ•˜์—ฌ ๊ณ„์‚ฐํ•ฉ๋‹ˆ๋‹ค.

compare ๋ณ€์ˆ˜์— ์ฒซ ๋ฒˆ์งธ ์ž‘์—…์˜ ํ•„์š”ํ•œ ์ผ ์ˆ˜๋ฅผ ์ €์žฅํ•˜๊ณ , count ๋ณ€์ˆ˜๋ฅผ ์ดˆ๊ธฐํ™”ํ•ฉ๋‹ˆ๋‹ค.

๋‘ ๋ฒˆ์งธ while ๋ฃจํ”„๋ฅผ ํ†ตํ•ด que๊ฐ€ ๋นŒ ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณตํ•˜๋ฉฐ ๊ฐ ์ž‘์—…์˜ ์™„๋ฃŒ๊นŒ์ง€ ๊ฑธ๋ฆฌ๋Š” ์ผ ์ˆ˜๋ฅผ ๋น„๊ตํ•˜์—ฌ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

compare์™€ ํ˜„์žฌ ์ž‘์—…์˜ ํ•„์š”ํ•œ ์ผ ์ˆ˜๋ฅผ ๋น„๊ตํ•˜์—ฌ ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์œผ๋ฉด ์ž‘์—…์„ ์™„๋ฃŒํ–ˆ์œผ๋ฏ€๋กœ count๋ฅผ ์ฆ๊ฐ€์‹œํ‚ค๊ณ  que์—์„œ ์ž‘์—…์„ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ์ƒˆ๋กœ์šด ์ž‘์—…์ด ์‹œ์ž‘๋˜์—ˆ์œผ๋ฏ€๋กœ list์— ํ˜„์žฌ๊นŒ์ง€ ์™„๋ฃŒ๋œ ์ž‘์—…์˜ ์ˆ˜๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ  count๋ฅผ ์ดˆ๊ธฐํ™”ํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ compare๋ฅผ ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค.

๋งˆ์ง€๋ง‰์œผ๋กœ list์— ์ €์žฅ๋œ ๊ฐ’์„ ๋ฐฐ์—ด๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

์ด ์ฝ”๋“œ๋Š” ๊ฐ ์ž‘์—…์ด ์™„๋ฃŒ๋˜๋Š” ๋ฐ ํ•„์š”ํ•œ ์ผ ์ˆ˜๋ฅผ ๊ณ„์‚ฐํ•˜๊ณ , ๊ฐ ๋‚ ์งœ๋ณ„๋กœ ์™„๋ฃŒ๋˜๋Š” ๊ธฐ๋Šฅ์˜ ์ˆ˜๋ฅผ ๊ณ„์‚ฐํ•˜์—ฌ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•ฉ๋‹ˆ๋‹ค.

๋ฐฐ์—ด๋กœ๋„ ํ’€์–ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

๋ฌธ์ œ์— ๋Œ€ํ•œ ๋‚˜์˜ ํ’€์ด

import java.util.ArrayList;

class Solution {
    public int[] solution(int[] progresses, int[] speeds) {

        ArrayList<Integer> list = new ArrayList<>();
        int day = 0;
        int count = 1;
        int idx = 0;
        for(int i = 0; i < progresses.length; i++){
            if(day * speeds[i] + progresses[i] >= 100){
                count++;
            }else if(i != 0){
                list.add(count);
                count = 1;
            }
            int temp = 100 - progresses[i];
            if(temp % speeds[i] == 0){
                int temp2 = temp / speeds[i];
                if(day < temp2){
                    day = temp2;
                }
            }else{
                int temp2 = temp / speeds[i] + 1;
                if(day < temp2){
                    day = temp2;
                }
            }
        }
        if(day * speeds[progresses.length - 1] + progresses[progresses.length - 1] >= 100){
            list.add(count);
        }



        int[] answer = new int[list.size()];
        for(int i = 0; i < list.size(); i++){
            answer[i] = list.get(i);
        }

        return answer;
    }
}
ํ’€์ด ๋ฆฌ๋ทฐ

solution ๋ฉ”์„œ๋“œ๋Š” ์ •์ˆ˜ ๋ฐฐ์—ด scoville๊ณผ ์ •์ˆ˜ K๋ฅผ ์ž…๋ ฅ์œผ๋กœ ๋ฐ›์Šต๋‹ˆ๋‹ค.

์šฐ์„ ์ˆœ์œ„ ํ PriorityQueue๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

scoville ๋ฐฐ์—ด์˜ ๊ฐ ์š”์†Œ๋ฅผ ์šฐ์„ ์ˆœ์œ„ ํ์— ์‚ฝ์ž…ํ•ฉ๋‹ˆ๋‹ค.

answer ๋ณ€์ˆ˜๋ฅผ ์ดˆ๊ธฐํ™”ํ•˜๊ณ , ์Šค์ฝ”๋นŒ ์ง€์ˆ˜๊ฐ€ K ์ด์ƒ์ด ๋  ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณตํ•ฉ๋‹ˆ๋‹ค.

๋ฐ˜๋ณต๋ฌธ ๋‚ด์—์„œ๋Š” ํ˜„์žฌ ์šฐ์„ ์ˆœ์œ„ ํ์˜ ๋งจ ์•ž ์š”์†Œ๊ฐ€ K๋ณด๋‹ค ์ž‘๋‹ค๋ฉด, ๊ฐ€์žฅ ์ž‘์€ ๋‘ ๊ฐœ์˜ ๊ฐ’์„ ๊บผ๋‚ด์„œ ์„ž์€ ํ›„ ๋‹ค์‹œ ํ์— ์‚ฝ์ž…ํ•ฉ๋‹ˆ๋‹ค. ์ด๋•Œ ์„ž์€ ๊ฒฐ๊ณผ๋Š” ์ฒซ ๋ฒˆ์งธ ๊ฐ’ + (๋‘ ๋ฒˆ์งธ ๊ฐ’ * 2)๋กœ ๊ณ„์‚ฐ๋ฉ๋‹ˆ๋‹ค.

์„ž์€ ํšŸ์ˆ˜๋ฅผ answer์— 1 ์ฆ๊ฐ€์‹œํ‚ต๋‹ˆ๋‹ค.

๋ฐ˜๋ณต๋ฌธ์ด ์ข…๋ฃŒ๋  ๋•Œ๊นŒ์ง€ ์Šค์ฝ”๋นŒ ์ง€์ˆ˜๊ฐ€ K ์ด์ƒ์ด ๋˜์ง€ ์•Š์•˜๋‹ค๋ฉด -1์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด answer๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

์ด ์ฝ”๋“œ๋Š” ์ฃผ์–ด์ง„ ์กฐ๊ฑด์— ๋”ฐ๋ผ ์Œ์‹์„ ์„ž์–ด์•ผ ํ•˜๋Š” ์ตœ์†Œ ํšŸ์ˆ˜๋ฅผ ๊ณ„์‚ฐํ•˜๋Š” ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•ฉ๋‹ˆ๋‹ค.