๐Ÿ”ฅ[99ํด๋Ÿฝ ์ฝ”ํ…Œ ์Šคํ„ฐ๋””] 9์ผ์ฐจ TIL - ๋” ๋งต๊ฒŒ

HOONSSACยท2024๋…„ 7์›” 30์ผ
1

99Club Coding Test Study

๋ชฉ๋ก ๋ณด๊ธฐ
9/41
post-thumbnail
post-custom-banner

โณ๋ฌธ์ œ

๋ฌธ์ œ ์„ค๋ช…

๋งค์šด ๊ฒƒ์„ ์ข‹์•„ํ•˜๋Š” 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

์ž…์ถœ๋ ฅ ์˜ˆ ์„ค๋ช…

  1. ์Šค์ฝ”๋นŒ ์ง€์ˆ˜๊ฐ€ 1์ธ ์Œ์‹๊ณผ 2์ธ ์Œ์‹์„ ์„ž์œผ๋ฉด ์Œ์‹์˜ ์Šค์ฝ”๋นŒ ์ง€์ˆ˜๊ฐ€ ์•„๋ž˜์™€ ๊ฐ™์ด ๋ฉ๋‹ˆ๋‹ค.
    ์ƒˆ๋กœ์šด ์Œ์‹์˜ ์Šค์ฝ”๋นŒ ์ง€์ˆ˜ = 1 + (2 * 2) = 5
    ๊ฐ€์ง„ ์Œ์‹์˜ ์Šค์ฝ”๋นŒ ์ง€์ˆ˜ = [5, 3, 9, 10, 12]

  2. ์Šค์ฝ”๋นŒ ์ง€์ˆ˜๊ฐ€ 3์ธ ์Œ์‹๊ณผ 5์ธ ์Œ์‹์„ ์„ž์œผ๋ฉด ์Œ์‹์˜ ์Šค์ฝ”๋นŒ ์ง€์ˆ˜๊ฐ€ ์•„๋ž˜์™€ ๊ฐ™์ด ๋ฉ๋‹ˆ๋‹ค.
    ์ƒˆ๋กœ์šด ์Œ์‹์˜ ์Šค์ฝ”๋นŒ ์ง€์ˆ˜ = 3 + (5 * 2) = 13
    ๊ฐ€์ง„ ์Œ์‹์˜ ์Šค์ฝ”๋นŒ ์ง€์ˆ˜ = [13, 9, 10, 12]

๋ชจ๋“  ์Œ์‹์˜ ์Šค์ฝ”๋นŒ ์ง€์ˆ˜๊ฐ€ 7 ์ด์ƒ์ด ๋˜์—ˆ๊ณ  ์ด๋•Œ ์„ž์€ ํšŸ์ˆ˜๋Š” 2ํšŒ์ž…๋‹ˆ๋‹ค.


โœ๏ธํ’€์ด

์ฒซ ๋ฒˆ์งธ ์‹œ๋„

์ด๋ ‡๊ฒŒ ์—ฌ๋Ÿฌ ์š”์†Œ๋“ค ์ค‘์—์„œ ์ตœ์†Ÿ๊ฐ’์ด๋‚˜ ์ตœ๋Œ“๊ฐ’์„ ํ™œ์šฉํ•ด์•ผ ํ•˜๋Š” ๋ฌธ์ œ๋Š” ํž™(Heap)์„ ํ™œ์šฉํ•˜๋ฉด ์‰ฝ๊ฒŒ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๊ฒ ๋‹ค๋Š” ์ƒ๊ฐ์ด ๋“ค์—ˆ๋‹ค. ์ด๋ฒˆ์—๋Š” ์ตœ์†Ÿ๊ฐ’์„ K๋ž‘ ๋น„๊ตํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ตœ์†Œํž™์„ ์‚ฌ์šฉํ•˜๊ธฐ๋กœ ํ–ˆ๋‹ค.

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

import java.util.*;

class Solution {
    public int solution(int[] scoville, int K) {
        PriorityQueue<Integer> scvHeap = new PriorityQueue<>();
        int count = 0;
        
        for (int i = 0; i < scoville.length; i++) {
            scvHeap.add(scoville[i]);
        }
        
        while (scvHeap.peek() < K) {
            int a = scvHeap.poll();
            int b = scvHeap.poll();
            scvHeap.add(a + b * 2);
            count++;
        }
        
        if (count == 0) {
            count = -1;
        }
        
        return count;
    }
}

์šฐ์„ , scoville์˜ ๋ชจ๋“  ์š”์†Œ๋ฅผ ์ตœ์†Œํž™์— ๋„ฃ์–ด์ฃผ์—ˆ๋‹ค.
๊ทธ๋ฆฌ๊ณ , peek()ํ•จ์ˆ˜๋กœ ๋ฃจํŠธ ๋…ธ๋“œ์˜ ๊ฐ’(์ตœ์†Ÿ๊ฐ’)์„ ํ™•์ธํ•ด K๊ฐ’๊ณผ ๋น„๊ตํ•ด์„œ K๋ณด๋‹ค ํฐ ์Šค์ฝ”๋นŒ ์ง€์ˆ˜๊ฐ€ ๋  ๋•Œ๊นŒ์ง€ ์Œ์‹์„ ์„ž๋Š” ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•˜๋„๋ก ํ•ด์ฃผ์—ˆ๋‹ค.

์Œ์‹์„ ์„ž๊ธฐ ์œ„ํ•ด์„œ ์Šค์ฝ”๋นŒ ์ง€์ˆ˜๊ฐ€ ๊ฐ€์žฅ ๋‚ฎ์€ ์Œ์‹ ์ฆ‰, ๋ฃจํŠธ ๋…ธ๋“œ์˜ ๊ฐ’์„ ๋จผ์ € ์ถ”์ถœํ•˜๊ณ ,
์Šค์ฝ”๋นŒ ์ง€์ˆ˜๊ฐ€ ๋‘ ๋ฒˆ์งธ๋กœ ๋‚ฎ์€ ์Œ์‹์„ ์—ฐ๋‹ฌ์•„ ์ถ”์ถœํ•ด a์™€ b์— ๊ฐ๊ฐ ๋„ฃ์–ด์ฃผ์—ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ๋ฌธ์ œ์— ์ œ์‹œ๋œ ๋ฐฉ๋ฒ•์— ๋”ฐ๋ผ a์™€ b๋ฅผ ์กฐํ•ฉํ•œ ํ›„, ๋‹ค์‹œ ํž™์— ๋„ฃ์–ด์ฃผ์—ˆ๋‹ค.
์ตœ์ข… ๋ฐ˜ํ™˜ํ•ด์•ผ ํ•˜๋Š” ๊ฐ’์€ ์Œ์‹์„ ์„ž์€ ํšŸ์ˆ˜์ด๊ธฐ ๋•Œ๋ฌธ์—, count๋ณ€์ˆ˜์— 1์„ ๋”ํ•ด์ฃผ์—ˆ๋‹ค.

๋งˆ์ง€๋ง‰์œผ๋กœ ๋ฌธ์ œ ์ œํ•œ ์‚ฌํ•ญ์— "๋ชจ๋“  ์Œ์‹์˜ ์Šค์ฝ”๋นŒ ์ง€์ˆ˜๋ฅผ K ์ด์ƒ์œผ๋กœ ๋งŒ๋“ค ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ์—๋Š” -1์„ return ํ•ฉ๋‹ˆ๋‹ค."๋ผ๋Š” ๋ถ€๋ถ„์„ ๊ณ ๋ คํ•˜๊ธฐ ์œ„ํ•ด count๊ฐ€ 0์ธ ๊ฒฝ์šฐ ์ฆ‰, ์Œ์‹์„ ์„ž์ง€ ์•Š๋Š” ๊ฒฝ์šฐ์—๋Š” -1์„ count์— ์ €์žฅ๋˜๋„๋ก ํ•˜์˜€๋‹ค.

๊ทธ๋žฌ๋”๋‹ˆ ๋ช‡๋ช‡ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค์—์„œ ์‹คํŒจ๊ฐ€ ๋ฐœ์ƒํ•˜์˜€๋‹ค..!

๋‘ ๋ฒˆ์งธ ์‹œ๋„

์•Œ๊ณ  ๋ณด๋‹ˆ, ๋ชจ๋“  ์Œ์‹์˜ ์Šค์ฝ”๋นŒ ์ง€์ˆ˜๋ฅผ K ์ด์ƒ์œผ๋กœ ๋งŒ๋“ค ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋ฌธ์ œ๊ฐ€ ์žˆ์—ˆ๋‹ค.

์Šค์ฝ”๋นŒ ์ง€์ˆ˜๊ฐ€ K๋ณด๋‹ค ์ž‘์€ ์š”์†Œ๊ฐ€ 2๊ฐœ ๋‚จ์•„ ์žˆ๊ณ , ๋‘ ์š”์†Œ๋ฅผ ์กฐํ•ฉํ•ด๋„ K๋ณด๋‹ค ์ž‘์€ ๊ฒฝ์šฐ, -1์ด ๋ฐ˜ํ™˜๋˜์–ด์•ผ ํ•˜๋Š”๋ฐ,
๋‚ด๊ฐ€ ์ง  ์ฝ”๋“œ์—์„œ๋Š” ๊ทธ๋Œ€๋กœ while๋ฌธ์„ ๋‹ค์‹œ ํ˜ธ์ถœํ•ด๋ฒ„๋ฆฌ๊ณ , ์š”์†Œ๊ฐ€ ํ•œ ๊ฐœ ๋ฟ์ธ๋ฐ ๋‘ ๊ฐœ๋ฅผ ์ถ”์ถœํ•˜๋ ค๊ณ  ํ•˜๋‹ˆ ๋Ÿฐํƒ€์ž„ ์—๋Ÿฌ๊นŒ์ง€ ๋ฐœ์ƒํ•ด๋ฒ„๋ฆฌ๋Š” ๊ฒƒ์ด์—ˆ๋‹ค!

๐Ÿ–ฅ๏ธ์ตœ์ข… ์ฝ”๋“œ

import java.util.*;

class Solution {
    public int solution(int[] scoville, int K) {
        PriorityQueue<Integer> scvHeap = new PriorityQueue<>();
        int count = 0;
        
        for (int i = 0; i < scoville.length; i++) {
            scvHeap.add(scoville[i]);
        }
        
        while (!scvHeap.isEmpty() && scvHeap.peek() < K) {
            int a = scvHeap.poll();
            
            if (!scvHeap.isEmpty()) {
                int b = scvHeap.poll();
                scvHeap.add(a + b * 2);
                count++;
            }
            else {
                count = -1;
            }
        }
        return count;
    }
}

๊ทธ๋ž˜์„œ while ์กฐ๊ฑด์— ํž™์ด ๋น„์–ด์žˆ์ง€ ์•Š๋‹ค๋Š” ์กฐ๊ฑด์„ ์ถ”๊ฐ€ํ•ด ์ฃผ์—ˆ๊ณ , ๋‚จ์•„ ์žˆ๋Š” ์š”์†Œ์˜ ๊ฐฏ์ˆ˜๊ฐ€ 2๊ฐœ ์ด์ƒ์ธ ๊ฒฝ์šฐ์—๋งŒ ์Œ์‹์„ ์„ž๋„๋ก ์กฐ๊ฑด๋ฌธ์„ ์ถ”๊ฐ€ํ•ด ์ฃผ์—ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ์ฒ˜๋ฆฌํ•จ์œผ๋กœ์จ, ๋งŒ์•ฝ ์š”์†Œ๊ฐ€ ํ•œ ๊ฐœ ๋ฟ์ธ ์ƒํ™ฉ์—์„œ๋Š” count์— -1์ด ์ €์žฅ๋˜๋„๋ก ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค๐Ÿ˜Ž


๐Ÿ”—๋ฌธ์ œ ๋งํฌ
๐Ÿ’ปRepository

profile
ํ›ˆ์‹น์˜ ๊ฐœ๋ฐœ์—ฌํ–‰
post-custom-banner

1๊ฐœ์˜ ๋Œ“๊ธ€

comment-user-thumbnail
2024๋…„ 7์›” 31์ผ

๐Ÿ”ฅ

๋‹ต๊ธ€ ๋‹ฌ๊ธฐ