728x90
프로그래머스
SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
#반복
모든 음식의 스코빌 지수 >= 원하는 스코빌 지수 이면 종료 => 우선순위 큐의 가장 첫번째 원소가 원하는 스코빌 지수 이상일
섞은 음식의 스코빌 지수 추가하기
가장 맵지 않은거, 두번째 맵지 않은거 제거
섞은 횟수++
=>PriorityQueue 사용하기
#일부 테스트에서 런타임 에러 발생한 코드
원인 : pq.poll()을 one, two로 2번 하는데 원소가 1개 남은 경우에는 two에 null이 들어가는데 int로 언박싱하려고 하기 때문에 NullPointerException이 발생
import java.util.*;
class Solution {
public int solution(int[] scoville, int K) {
int answer = 0; // 섞은 횟수
// 우선순위 큐에 기존 스코빌 지수 모두 넣기
PriorityQueue<Integer> pq = new PriorityQueue<>();
for(int s : scoville){
pq.offer(s);
}
while(true){
if(pq.peek() >= K) break;
int one = pq.poll();
int two = pq.poll();
int new_s = one + two*2;
pq.offer(new_s);
answer++;
}
return answer;
}
}
#수정한 코드 : 원소가 1개인 경우도 고려하기
import java.util.*;
class Solution {
public int solution(int[] scoville, int K) {
int answer = 0; // 섞은 횟수
// 우선순위 큐에 기존 스코빌 지수 모두 넣기
PriorityQueue<Integer> pq = new PriorityQueue<>();
for(int s : scoville){
pq.offer(s);
}
while(true && pq.size() >= 2){
if(pq.peek() >= K) break;
int one = pq.poll();
int two = pq.poll();
int new_s = one + two*2;
pq.offer(new_s);
answer++;
}
// 원소가 1개인 경우
if(pq.poll() < K){
return -1;
}
return answer;
}
}'Algorithm > Programmers' 카테고리의 다른 글
| 같은 숫자는 싫어 : Java (0) | 2026.06.25 |
|---|---|
| [Lv.2] 주식 가격 : Java, Stack (0) | 2026.06.17 |
| [Lv.2] 롤케이크 자르기 : Java (0) | 2026.06.11 |
| [Lv.3] 순위 : Java / 플로이드 워셜 (0) | 2026.03.06 |
| [Lv.3] 가장 먼 노드 : Java (0) | 2026.03.06 |