본문 바로가기
Backend/알고리즘

[프로그래머스] Lv2. 더 맵게

by 박상윤 2024. 5. 31.

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

일일히 반복문 돌면서  찾기에는 시간복잡도가 너무 크다고 판단

우선순위 큐를 사용해주었다. 왜? 정렬하는데 log N이 걸리기 때문에!

 

예외 상황을 고려해 주어야한다.

input: [7], k:7 인 상황에서 output은 0이 나와야 한다.

 

import java.util.*;

class Solution {
    public int solution(int[] scoville, int K) {
        int answer = 0;
        
        PriorityQueue<Integer> pq = new PriorityQueue<>();
        
        for(int value: scoville) {
            pq.add(value);
        }
        
        boolean flag = true;
        
        while(!pq.isEmpty()) {
            
            if(pq.size() == 1 && pq.peek() < K) {
                flag = false;
                break;
            }
         
            int first = pq.poll();
            
            if(first < K) {
                int second = pq.poll();
                int sum = (int)(first + second * 2);
                pq.add(sum);
                answer++;
                
                continue;
            }
            
            break;
        }
        
        if(!flag) {
            answer = -1;
        }
        
        return answer;
    }
}

 

실행 결과