Algorithm/Programmers

[Lv.2] 더 맵게 : Java, PriorityQueue

say! 2026. 6. 17. 16:08
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