프로그래머스 알고리즘 (java)
더 맵게
코드 리뷰
배열중 값(스코빌 지수)이 가장 낮은 두개의 음식을 조건( a + b*2)
에 맞춰 계산해 모든 배열의 값이 k
이상이 되게 만들어 섞은 횟수를 return
하는 문제 입니다.
조건
- 가장 작은 값 2개를 배열에서 뽑는다.
- 작은것과 두번째 작은것을 조건에 맞춰 계산한다.
- 계산한 값을 다시 배열에 반환한다.
- 배열의 값이 다 k보다 클 때 까지 반복한다.
풀이 방향
저는 가장 작은 값을 두개 뽑아야 하니 우선순위 큐
를 사용하면 될것이라 생각했습니다.
생각대로 구현해보니 어렵지 않게 구현할 수 있었습니다.
우선순위 큐
를 사용할 줄 알면 쉽게 풀 문제였던거 같습니다.
import java.util.PriorityQueue;
class Solution {
public int solution(int[] scoville, int K) {
int answer = 0;
PriorityQueue<Integer> heap = new PriorityQueue();
for (int aScoville : scoville) {
heap.offer(aScoville);
}
while (heap.peek() <= K) {
if (heap.size() == 1) {
return -1;
}
int a = heap.poll();
int b = heap.poll();
int result = a + (b * 2);
heap.offer(result);
answer ++;
}
return answer;
}
}