알고리즘/코딩테스트-Programmers

[Programmers] 더 맵게 JAVA

kwang2134 2025. 2. 1. 18:22
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