[프로그래머스] 더 맵게
https://school.programmers.co.kr/learn/courses/30/lessons/42626
K 이상
으로 만든다.섞은 음식의 스코빌 지수
는 섞은 음식의 스코빌 지수 =가장 맵지 않은 음식의 스코빌 지수 + (두 번째로 맵지 않은 음식의 스코빌 지수 * 2)
scoville의 길이
는 2 이상 1,000,000 이하입니다.K
는 0 이상 1,000,000,000 이하입니다.scoville의 원소
는 각각 0 이상 1,000,000 이하입니다.만들 수 없는 경우
에는 -1
을 return 합니다.우선순위 큐(pq)
를 사용한다.스코빌 지수가 가장 낮은 값(min)
을 사용해 종료 조건을 비교한다.while문
을 사용해 반복 횟수(answer)
를 찾는다.min
이 K 이상이 되면 종료된다.pq의 크기
가 1 이하가 되면 종료된다.-1
을 출력한다.public static int solution(int[] scoville, int K) {
int answer = 0;
// 우선순위 큐 사용
PriorityQueue<Integer> pq = new PriorityQueue<>();
// 데이터 삽입
for(int value : scoville) {
pq.add(value);
}
// 현재 가장 스코빌 지수가 낮은 값 찾기
int min = pq.peek();
// 연산 반복
while(K > min && pq.size() > 1) {
int a = pq.poll();
int b = pq.poll();
int nScale = a + b * 2;
pq.add(nScale);
answer++;
min = pq.peek();
}
// 반복문 종료
// -> pq에 값이 1개 이하 남음
// -> 더 이상 조합할 수 없음
// 그 하나 남은 값의 스코빌 지수가 K보다 작다면 -1
if (K > min) {
answer = -1;
}
return answer;
}