ALGORITHM/PROGRAMMERS

[프로그래머스] 더 맵게

0298 2021. 7. 30. 10:41

https://programmers.co.kr/learn/courses/30/lessons/42626?language=java 

 

코딩테스트 연습 - 더 맵게

매운 것을 좋아하는 Leo는 모든 음식의 스코빌 지수를 K 이상으로 만들고 싶습니다. 모든 음식의 스코빌 지수를 K 이상으로 만들기 위해 Leo는 스코빌 지수가 가장 낮은 두 개의 음식을 아래와 같

programmers.co.kr

2021-07-30


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import java.util.*;
class Solution {
    public int solution(int[] scoville, int K) {
        int answer = 0;
 
        PriorityQueue<Integer> pq = new PriorityQueue<>();
        for (int j : scoville) pq.offer(j);
 
        while(pq.size() > 0) {
            int one = pq.poll();
            if(one >= K) break;
            if(pq.size() == 0return -1;
            int two = pq.poll();
            int tmp = one + two * 2;
            pq.offer(tmp);
            answer++;
        }
 
        return answer;
    }
}
cs

#문제풀이

PriorityQueue를 이용하였다. 

 

while문을 돌 때, 처음에 하나를 뽑는다. 이 때, K 이상이면 바로 함수를 끝낸다. 이미 정렬 된 상태 이므로, 가장 낮은 숫자가 조건을 만족하면 다음 숫자들도 마찬가지 일 것이다.  

 

그리고 pq에 하나도 안 남으면 스코빌 지수를 섞을 수 없으므로, 더 이상 만들 수 없는것으로 판단하여 -1을 리턴한다. 

 

pq에 아직 값이 남아있는데 만약 아직 조건을 만족하지 못한다면, 두 번째 낮은 값을 꺼내 계산해주고 다시 pq에 offer 해준다.