1. 문제

https://programmers.co.kr/learn/courses/30/lessons/42626

 

코딩테스트 연습 - 더 맵게

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

programmers.co.kr

2. 접근방법

코딩 테스트 연습 heap 1번문제

 

Priority Queue 를 쓰면 쉽게 해결 가능하다.

pq를 이용해 오름차순에서 2개를 꺼내고

이 조건에 맞춰 다시 넣어주고

만약 pq에서 처음으로 꺼낸 수가

k를 넘어가면 끝내면 된다.

 

3. 자바 코드

import java.util.PriorityQueue;

public class P42626더맵게 {
	
    public int solution(int[] scoville, int K) {
        int answer = 0;
        PriorityQueue<Integer> pq = new PriorityQueue<Integer>();
        for(int i : scoville)
        	pq.add(i);
        boolean flag = true;
        while(!pq.isEmpty()) {
            
        	int f = pq.poll();
        	if(f >=K)
        		break;
        	if(pq.isEmpty()) {
        		flag = false;
        		break;
        	}
        	int s = pq.poll();
        	pq.add(f+s*2);
        	answer++;
        }
        return flag ? answer : -1;
    }

}

4. 마치며

pq 사용에 가장 기본적인 문제였다.

+ Recent posts