๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Algorithm

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค[Java] - (Level2)๋” ๋งต๊ฒŒ(Heap)

by ์ฃผ๋ฐœ2 2020. 3. 20.
๋ฐ˜์‘ํ˜•

https://programmers.co.kr/learn/courses/30/lessons/42626

 

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

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

programmers.co.kr

์ฝ”๋“œ

import java.util.*;

class Solution {
    public int solution(int[] scoville, int K) {
        int answer = 0;
        Queue<Integer> pq = new PriorityQueue<Integer>();
        // ์šฐ์„ ์ˆœ์œ„ ํ์— ๋ฐฐ์—ด๊ฐ’ ์ €์žฅ
        for(int i : scoville)   pq.offer(i);
        
        // ์šฐ์„ ์ˆœ์œ„ ํ์— ์Šค์ฝ”๋นŒ์ง€์ˆ˜ K๋ณด๋‹ค ๊ฐ’์ด ์ž‘์„๋•Œ ๋ฐ˜๋ณต
        while(pq.peek() < K){
            // ํ˜„์žฌ ์šฐ์„ ์ˆœ์œ„ ํ์— ๊ฐ’์ด ํ•œ๊ฐœ๋งŒ ์กด์žฌํ•˜๊ณ , ๊ทธ๊ฐ’์ด K๋ณด๋‹ค ์ž‘์œผ๋ฏ€๋กœ ์Šค์ฝ”๋นŒ์ง€์ˆ˜๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์—†์Œ -> -1 ๋ฆฌํ„ด
            if(pq.size() == 1)
                return -1;
            
            // ์„ž์€ ์Œ์‹์˜ ์Šค์ฝ”๋นŒ ์ง€์ˆ˜ = ๊ฐ€์žฅ ๋งต์ง€ ์•Š์€ ์Œ์‹์˜ ์Šค์ฝ”๋นŒ ์ง€์ˆ˜ + (๋‘ ๋ฒˆ์งธ๋กœ ๋งต์ง€ ์•Š์€ ์Œ์‹์˜ ์Šค์ฝ”๋นŒ ์ง€์ˆ˜ * 2)
            int a = pq.poll();
            int b = pq.poll();
            pq.offer(a+(2*b));
            answer ++;
        }
        
        return answer;
    }
}

ํ’€์ด

์šฐ์„ ์ˆœ์œ„ํ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฌธ์ œ๋กœ, ํž™ ์ž๋ฃŒ๊ตฌ์กฐ์— ๋Œ€ํ•œ ๊ฐœ๋…์ด ๋ถ€์กฑํ•˜๊ณ ,, ์šฐ์„ ์ˆœ์œ„ํ๋Š” ์‚ฌ์‹ค ๊ฑฐ์˜ ์ฒ˜์Œ ์‚ฌ์šฉํ•ด ๋ณด๋Š” ๊ฒƒ ๊ฐ™๋‹ค. ๋‹ค์Œ์— ์‹œ๊ฐ„๋‚ ๋•Œ ํž™์—๋Œ€ํ•ด ์ •๋ฆฌ๋ฅผ ํ•ด์•ผ๊ฒ ๋‹ค.

 

์šฐ์„ ์ˆœ์œ„ ํ๋Š” ํ์˜ ์ผ์ข…์ด์ง€๋งŒ, ํ์™€๋Š” ๋‹ค๋ฅด๊ฒŒ ๊ธฐ์กด์˜ ์„ ์ž…์„ ์ถœ์ด ์•„๋‹Œ ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋†’์€ ์ˆœ์„œ๋Œ€๋กœ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

์ฆ‰ ์œ„ ์šฐ์„ ์ˆœ์œ„ pq์— ์–ด๋– ํ•œ ๊ฐ’์ด ์žˆ๋“  ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๊ฐ€์žฅ ๋†’์€(๊ฐ€์žฅ ์ž‘์€๊ฐ’) ๊ฐ’์ด peek()์— ์˜ํ•ด K์™€ ๋น„๊ต๊ฐ€ ๋œ๋‹ค.

K๋ณด๋‹ค ์ž‘์„๋•Œ, ๊ฐ€์žฅ ์ž‘์€ ๊ฐ’ ๋‘ ๊ฐœ๋ฅผ ๋นผ๋‚ด๊ณ  ์ด ๋‘ ๊ฐœ์˜ ๊ฐ’์„ ํ†ตํ•ด ์ƒˆ๋กœ์šด ๊ฐ’(์Šค์ฝ”๋นŒ์ง€์ˆ˜)์„ ๋งŒ๋“ ๋‹ค.

 

์ฆ‰ ๋ฐ์ดํ„ฐ๋“ค์ด ์šฐ์„  ์ˆœ์œ„์—๋”ฐ๋ผ ์ž๋™์œผ๋กœ ์ •๋ ฌ๋˜๋Š” ํŽธ๋ฆฌํ•œ ์ž๋ฃŒ๊ตฌ์กฐ์ด๋‹ค !

 

๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€