티스토리 뷰

programmers.co.kr/learn/courses/30/parts/12117

1. 문제

2. 풀이

import java.util.*;
class Solution {
    public int solution(int[] scoville, int K) {
	int answer = -1;
        PriorityQueue<Integer> queue = new PriorityQueue<>();
        for (int i = 0; i < scoville.length; i++) {
            queue.add(scoville[i]);
        }
        int count = 0;
        while (queue.size() > 1) {
            count++;
            int first = queue.poll();
            int second = queue.poll();
            queue.add(first + (second * 2));
            int minVal = queue.peek();
            if (minVal >= K) {
                answer = count;
                break;
            }
        }
        return answer;
    }
}

우선순위큐를 이용해서 해결.

큐에 입력값을 모두 넣어두고, queue에 1개 이하로 남아있을 때까지 count++해주고 큐에서 매번 2개씩 poll하면서 , first + (second * 2) 한 것을 다시 큐에 넣어주고, 큐에서 peek을 했을 때 그 값이 K보다 크가나 같은 경우 그 count를 result로 반환해줌. 

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
글 보관함