Algorithm/프로그래머스
[프로그래머스] level2. 더 맵게 (자바 JAVA)
ilmiodiario
2021. 9. 2. 14:18
[ 문제 ] [프로그래머스] level2. 더 맵게 (자바 JAVA)
문제 링크 : https://programmers.co.kr/learn/courses/30/lessons/42626?language=java
코딩테스트 연습 - 더 맵게
매운 것을 좋아하는 Leo는 모든 음식의 스코빌 지수를 K 이상으로 만들고 싶습니다. 모든 음식의 스코빌 지수를 K 이상으로 만들기 위해 Leo는 스코빌 지수가 가장 낮은 두 개의 음식을 아래와 같
programmers.co.kr
# 접근 방법 및 풀이
- 우선순위 큐를 이용해서 풀었다.
- scoville[ ] 배열의 값을 PQ에 저장하면 오름차순으로 정렬되어 저장된다.
- 이때 PQ를 pop하면 가장 작은 수 부터 차례대로 나오므로, 문제 그대로 스코빌 지수를 계산해 다시 PQ에 넣어주면된다.
- 섞인 스코빌 지수는 가장 낮은 수와 그다음 낮은 수 숫자 두개가 필요하므로 숫자 2개를 팝하고 새로 add하는건 1개의 숫자 이므로 PQ의 사이즈는 점차 작아진다.
- 이때 PQ사이즈가 비어있을 때 pop하면 런타임오류가 나기 때문에 이부분에 대한 처리를 해주어야한다.
- 자세한건 코드참조
# 주의할 점
- 스코빌 지수를 K이상 만들 수 없을 때 -1 처리.
- PQ사이즈가 1일 경우 숫자가 한 개 밖에 없기 때문에 스코빌 지수를 만들 수 없음
JAVA 코드
import java.util.PriorityQueue;
class Solution {
public int solution(int[] scoville, int K) {
int answer = 0;
PriorityQueue<Integer> pqueue = new PriorityQueue<>();
for(int i = 0; i < scoville.length; i++){
pqueue.add(scoville[i]);
}
while(!pqueue.isEmpty()){
int first = pqueue.poll();
if(first >= K)
break;
if(pqueue.isEmpty())
return -1;
else{
int second = pqueue.poll();
answer++;
pqueue.add(first + (second * 2));
}
}
return answer;
}
}
REVIEW