Old/Algorithms

[JAVA] 프로그래머스 : 라면공장 (코딩테스트 고득점 kit > 힙(Heap))

유뱅유뱅뱅 2020. 7. 15. 19:23

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

 

코딩테스트 연습 - 라면공장

라면 공장에서는 하루에 밀가루를 1톤씩 사용합니다. 원래 밀가루를 공급받던 공장의 고장으로 앞으로 k일 이후에야 밀가루를 공급받을 수 있기 때문에 해외 공장에서 밀가루를 수입해야 합니��

programmers.co.kr

우선순위 큐를 이용하여 구현함

공급 물량을 내림차순으로 하여 저장하게 하였음
또한 재고가 부족한 경우에 poll() 해서 더해주도록 함
왜냐하면 결국엔 stock이 다 쓴경우에 채워서 쓰면 최소로 공급 받는 방법이 되기 때문임
추가로 우선순위 큐로 구현하였기 때문에 중간에 필요없이 공급받아야 하는 경우 또한 제외할 수 있음

import java.util.*;

// 라면공장
// k-1일 까지의 밀가루 수량 확보 필요

class Solution {
    
    public int solution(int stock, int[] dates, int[] supplies, int k) {
        int answer = 0;
        
        // 내림 차순
        Queue<Integer> pq = new PriorityQueue<>(Collections.reverseOrder());
        
        int supplyIdx = 0;
        // k-1일까지
        for(int i = 0 ; i < k ; i++){
            // 현재 날짜와 공급 가능일이 같으면 큐에 추가
            if(supplyIdx < dates.length && i == dates[supplyIdx]){
                pq.offer(supplies[supplyIdx]);
                supplyIdx++;
            }
            
            stock--;
            
            // stock 이 -1이 되면 큐에서 빼서 stock 추가
            if(stock == -1) {
                stock += pq.poll();
                answer++;
            }
        }
        
        return answer;
    }
}