programmers.co.kr/learn/courses/30/lessons/42626
각 음식의 스코빌 지수를 담은 int[] scoville과 최소 스코빌 지수 int K가 주어진다.
scoville의 모든 수가 K 이상이 되도록 각 스코빌 지수들을 조합하여 새로운 스코빌 지수를 만들어 넣는다.
이 과정을 몇 번 수행해야 모든 스코빌 지수가 K 이상이 되는지를 반환해야한다.
풀이 .
import java.util.*;
class Solution {
public int solution(int[] scoville, int K) {
int answer = 0;
PriorityQueue<Integer> minHeap = new PriorityQueue<>();
for(int scov : scoville) {
minHeap.add(scov);
}
while(minHeap.peek() < K) {
int temp = minHeap.poll() + minHeap.poll() * 2;
minHeap.add(temp);
answer++;
// 예외처리. 아무리 반복해도 K 이상이 될 수 없다면 return -1
if(minHeap.size() == 1 && minHeap.peek() < K) {
answer = -1;
break;
}
}
return answer;
}
}
PriorityQueue를 사용해 minHeap을 만들었다.
pq의 디폴트는 민힙이고 new PriorityQueue<>(Collections.reverseOrder()을 통해 맥스힙도 만들 수 있다.
'알고리즘 문제 > 프로그래머스' 카테고리의 다른 글
[PG] 이중 우선순위 큐 JAVA (0) | 2020.12.31 |
---|---|
[PG] 디스크 컨트롤러 JAVA (0) | 2020.12.31 |
[PG] 프린터 JAVA (0) | 2020.12.30 |
[PG] 다리를 지나는 트럭 JAVA (0) | 2020.12.28 |
[PG] 기능 개발 JAVA (0) | 2020.12.28 |