728x90
반응형
728x90
[Programmers] 더 맵게 - LV 2
접근
- 힙
풀이
음식의 스코빌 지수가 주어지고 모든 음식의 스코빌 지수를 K 이상으로 만드는 문제이다. 음식을 섞어 스코빌 지수를 올릴 수 있고 음식을 몇 번 섞어야 모든 음식의 스코빌 지수가 K를 넘는지 구해야 한다. 힙 카테고리의 문제로 힙을 통해 구현된 우선순위 큐를 사용하면 간단하게 풀 수 있다.
public int solution(int[] scoville, int K) {
PriorityQueue<Integer> pq = new PriorityQueue<>();
for (int i : scoville) {
pq.offer(i);
}
int answer = 0;
while (!pq.isEmpty()) {
if (pq.peek() >= K) {
break;
}
int first = pq.poll();
if (pq.isEmpty()) {
answer = -1;
break;
}
int second = pq.poll();
int newScoville = first + (second * 2);
pq.offer(newScoville);
answer++;
}
return answer;
}
우선순위 큐에 스코빌 지수를 넣게 되면 편하게 제일 안 매운 음식과 그다음으로 안 매운 음식에 접근할 수 있고 peek 값이 K를 넘는 다면 처리 과정이 끝난 것이고 1개의 음식만 남게 되었다면 스코빌 지수를 원하는 값으로 맞추지 못했다는 것으로 -1을 반환하게 된다.
전체 코드
import java.util.*;
class Solution {
public int solution(int[] scoville, int K) {
PriorityQueue<Integer> pq = new PriorityQueue<>();
for (int i : scoville) {
pq.offer(i);
}
int answer = 0;
while (!pq.isEmpty()) {
if (pq.peek() >= K) {
break;
}
int first = pq.poll();
if (pq.isEmpty()) {
answer = -1;
break;
}
int second = pq.poll();
int newScoville = first + (second * 2);
pq.offer(newScoville);
answer++;
}
return answer;
}
}
728x90
'알고리즘 > 코딩테스트-Programmers' 카테고리의 다른 글
[Programmers] 구명보트 JAVA (1) | 2025.02.04 |
---|---|
[Programmers] 피로도 JAVA (0) | 2025.02.03 |
[Programmers] 프로세스 JAVA (1) | 2025.01.31 |
[Programmers] 의상 JAVA (0) | 2025.01.30 |
[Programmers] 전화번호 목록 JAVA (1) | 2025.01.27 |