본문 바로가기
Beakjoon&프로그래머스/Java

[프로그래머스/Java] 더 맵게

by 현장 2026. 1. 4.

-Code

import java.util.*;

class Solution {
    public int solution(int[] scoville, int K) {
        int answer = 0;
        // 우선 순위 큐에 스코빌 지수들 저장
        PriorityQueue<Integer> pq = new PriorityQueue<>();
        for (int i = 0; i < scoville.length; i++) {
            pq.add(scoville[i]);
        }
        // 돌면서 스코빌 섞기
        while(true) {
            int nowScoville = pq.poll();
            // 맨앞 스코빌이 K이상이면 반환
            if (nowScoville >= K) return answer;
            // 비어있으면 탈출
            if (pq.isEmpty()) break;
            // 안 비어있으면 계산
            nowScoville += pq.poll() * 2;
            pq.add(nowScoville);
            answer++;
        }
        
        return -1;
    }
}

처음에는 덱으로 풀릴 줄 알고 정렬 후 덱에 넣고 앞부터 비교했습니다. 하지만 그렇게 되면 첫 번째 원소가 두 번째 원소보다 커지면 문제가 생기기 때문에 우선순위 큐라는 자료 구조를 사용해야 한다는 것을 알고 사용했습니다. 단 비어있는 경우와 현재 스코빌이 K이상인 경우를 따로 체크를 해주는 부분도 필요해서 한번 더 틀렸었습니다.