다희의 코딩 성장일기

[프로그래머스] level2. 더 맵게 (자바 JAVA) 본문

Algorithm/프로그래머스

[프로그래머스] level2. 더 맵게 (자바 JAVA)

ilmiodiario 2021. 9. 2. 14:18

[ 문제 ]  [프로그래머스] level2. 더 맵게 (자바 JAVA)

 

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

 

코딩테스트 연습 - 더 맵게

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

programmers.co.kr


# 접근 방법 및 풀이 

 

  • 우선순위 큐를 이용해서 풀었다. 
  • scoville[ ] 배열의 값을 PQ에 저장하면 오름차순으로 정렬되어 저장된다.
  • 이때 PQ를 pop하면 가장 작은 수 부터 차례대로 나오므로, 문제 그대로 스코빌 지수를 계산해 다시 PQ에 넣어주면된다.
  • 섞인 스코빌 지수는 가장 낮은 수 그다음 낮은 수 숫자 두개가 필요하므로 숫자 2개를 팝하고 새로 add하는건 1개의 숫자 이므로 PQ의 사이즈는 점차 작아진다.
  • 이때 PQ사이즈가 비어있을 때 pop하면 런타임오류가 나기 때문에 이부분에 대한 처리를 해주어야한다.
  • 자세한건 코드참조

# 주의할 점 

 

  • 스코빌 지수를 K이상 만들 수 없을 때 -1 처리.
  • PQ사이즈가 1일 경우 숫자가 한 개 밖에 없기 때문에 스코빌 지수를 만들 수 없음

 

JAVA 코드
import java.util.PriorityQueue;
class Solution {
    public int solution(int[] scoville, int K) {
        int answer = 0;
        PriorityQueue<Integer> pqueue = new PriorityQueue<>();
        for(int i = 0; i < scoville.length; i++){
            pqueue.add(scoville[i]);
        }
        while(!pqueue.isEmpty()){
            int first = pqueue.poll();
            if(first >= K)
                break;
            if(pqueue.isEmpty())
                return -1;
            else{
                int second = pqueue.poll();
                answer++;
                pqueue.add(first + (second * 2));
            }
        }
        return answer;
    }
}

 

 

 

REVIEW

Comments