1. ๋ฌธ์ œ์„ค๋ช…

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

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

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

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

์ œํ•œ์‚ฌํ•ญ

์ž…์ถœ๋ ฅ ์˜ˆ

scoville K return
[1, 2, 3, 9, 10, 12] 7 2

2. ๋ฌธ์ œ๋ถ„์„(์‚ฌ์ „)

3. JAVA์ฝ”๋“œ

import java.util.PriorityQueue;

public class Solution {

    // ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค LEVEL2 ๋” ๋งต๊ฒŒ
    // ๋ฌธ์ œ URL : <https://programmers.co.kr/learn/courses/30/lessons/42626>

    public int solution(int[] scoville, int K) {
        // ์šฐ์„ ์ˆœ์œ„๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ•ด๋‹น๋ฌธ์ œ ํ•ด๊ฒฐ๊ฐ€๋Šฅ
        PriorityQueue<Integer> pq = new PriorityQueue<>();
        // ์šฐ์„ ์ˆœ์œ„ํ์— ๊ฐ’ ์„ค์ •
        for (Integer i : scoville) {
            pq.offer(i);
        }
        // ์ œ์ผ ์ž‘์€ ๋งค์šด๋ง›์ด ๊ธฐ์ค€๋ณด๋‹ค ํฌ๋ฉด 0 ๋ฐ˜ํ™˜
        if (pq.peek() >= K) {
            return 0;
        }
        int minCnt = 0;     // ์„ž๋Š” ํšŸ์ˆ˜
        while (pq.peek() < K) {
            if (pq.size() == 1) {
                return -1;
            }
						 int a = pq.poll(); // ์ œ์ผ์ž‘์€ ๊ฐ’ ๋ฐ˜ํ™˜ ๋ฐ ์ œ๊ฑฐ
						 int b = pq.poll(); // ๋‘๋ฒˆ์งธ ๊ฐ’ ๋ฐ˜ํ™˜ ๋ฐ ์ œ๊ฑฐ

				    int result = a + (b * 2);
				    minCnt++;

				    pq.offer(result);  // ํ•ด๋‹น๊ฐ’ ์šฐ์„ ์ˆœ์œ„ํ์— ์ถ”๊ฐ€
        }
        return minCnt;
    }
}