import java.util.*;
class Solution {
public int solution(int[] scoville, int k) {
int answer = 0;
// 1 2 3 9 10 12
// 1 + (2*2) = 5
// 5 3 9 10 12 -> 계속 정렬을 해주자 -> pq로 하면 안해도됨
// 3 + (5*2) = 13
// 9 10 12 13
PriorityQueue<Integer> pq = new PriorityQueue<>();
for(int i=0; i<scoville.length; i++) pq.offer(scoville[i]);
while(pq.peek()<k){
//계속 돌리다가 하나남아서 k를 못넘기는 경우 -> -1출력
if(pq.size()==1){
return answer=-1;
}
else {
int socv = pq.poll() + (pq.poll() * 2);
pq.offer(socv);
answer++;
}
}
return answer;
}
}
요즘은 문제만 이해하면 바로바로 로직을 짜는 듯하다. 이제는 효율성을 생각할때.
ArrayLsit<>로 문제를 풀었는데 효율이 안좋아서 , PriorityQueue로 해결.
이 문제에서 만약에 k이상의 수를 만들수없을 때 -1리턴하는 경우를 조심해줘야한다.
문제를 좀 똑바로 읽자. 엄청 금방 풀 수 있는 문제인데 조심하자.
정말 유익한 글이었습니다.