출처: 프로그래머스 코딩테스트 힙(Heap) 1번째 문제
(https://programmers.co.kr/learn/courses/30/lessons/42626)
매운 것을 좋아하는 Leo는 모든 음식의 스코빌 지수를 K 이상으로 만들고 싶습니다. 모든 음식의 스코빌 지수를 K 이상으로 만들기 위해 Leo는 스코빌 지수가 가장 낮은 두 개의 음식을 아래와 같이 특별한 방법으로 섞어 새로운 음식을 만듭니다.
Leo는 모든 음식의 스코빌 지수가 K 이상이 될 때까지 반복하여 섞습니다.
Leo가 가진 음식의 스코빌 지수를 담은 배열 scoville과 원하는 스코빌 지수 K가 주어질 때, 모든 음식의 스코빌 지수를 K 이상으로 만들기 위해 섞어야 하는 최소 횟수를 return 하도록 solution 함수를 작성해주세요
import java.util.PriorityQueue;
class Solution {
public Integer solution(int[] scoville, int K) {
int mixCnt = 0;
PriorityQueue<Integer> priorityQueue = new PriorityQueue<>();
for( int s : scoville) {
priorityQueue.add(s);
}
while (priorityQueue.peek() < K ) {
if ( priorityQueue.size() < 2 ) {
return -1;
}
int firstScoville = priorityQueue.poll();
int secondScoville = priorityQueue.poll();
mix(priorityQueue,firstScoville,secondScoville);
mixCnt++;
}
return mixCnt;
}
public void mix(PriorityQueue<Integer> priorityQueue,int firstScoville, int secondScoville) {
int newScovile = firstScoville + (secondScoville * 2);
priorityQueue.add(newScovile);
}
}
문제를 잘못 읽어서 섞는 공식을 잘못 설정해 계속 틀려서 많이 해맸다. 코딩테스트를 풀때 항상 문제를 정확히 파악하는 연습이 필요한 것 같고 반성해야겠다.