본문 바로가기
코딩 테스트/알고리즘(Java)

[프로그래머스/Lv.2] 더 맵게

by KeepCoding 2025. 2. 4.

<문제>

 

 

<접근 방식>

1) 작은수부터 계속해서 조회해서 값을 추가 비교 하기 때문에 해당 문제에 효율적인 자료구조 PriorityQueue를 사용.

2) peek()한 갑이 K보다 클때까지 무한 반복하되 PriorityQueue의 사이즈가 1개라면 더 이상 섞을 수 없으니 -1 반환.

3) PriorityQueue에서 2개의 값을 꺼내어 제시한 연산 진행후 add() 및 섞은 횟수 +1.

 

 

<코드>

import java.util.*;

class Solution {
    public int solution(int[] scoville, int K) {
        int answer = 0;
        
        PriorityQueue<Integer> priorityQueue = new PriorityQueue<>();
        for(int i = 0; i < scoville.length; ++i){
            priorityQueue.add(scoville[i]);
        }
        
        while(priorityQueue.peek() < K){
            if(priorityQueue.size() < 2){
                return -1;
            }
            
            int first = priorityQueue.poll();
            int second = priorityQueue.poll();
            
            priorityQueue.add(first + (second * 2));
            ++answer;
        }
        
        return answer;
    }
}
반응형