ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Programmers] 라면공장
    Algorithm/Programmers 2020. 6. 4. 01:14

    [Level 2] 라면공장

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

    • 라면 공장에서는 하루에 밀가루를 1톤씩 사용합니다. 원래 밀가루를 공급받던 공장의 고장으로 앞으로 k일 이후에야 밀가루를 공급받을 수 있기 때문에 해외 공장에서 밀가루를 수입해야 합니다.
    • 해외 공장에서는 향후 밀가루를 공급할 수 있는 날짜와 수량을 알려주었고, 라면 공장에서는 운송비를 줄이기 위해 최소한의 횟수로 밀가루를 공급받고 싶습니다.
    • 현재 공장에 남아있는 밀가루 수량 stock, 밀가루 공급 일정(dates)과 해당 시점에 공급 가능한 밀가루 수량(suppies), 원래 공장으로부터 공급받을 수 있는 시점 k가 주어질 때, 밀가루가 떨어지지 않고 공장을 운영하기 위해서 최소한 몇 번 해외 공장으로 부터 밀가루를 공급받아야 하는지를 return 하도록 solution 함수를 완성하세요.
    • dates[i] 에는 i번째 공급 가능일이 들어있으며, supplies[i]에는 dates[i] 날짜에 공급 가능한 밀가루 수량이 들어 있습니다.

     

     

    Solution

    • 혼자서 생각해내지 못한 문제
    • 처음부터 모든 supplies[]를 큐에 넣고 시작하려고 했던것이 잘못된 생각이였다.
    • for문으로 day를 증가하면서 공급 예정 날짜에 dates[] 큐에 넣고,
    • stock이 0이 되는 시점에서 큐에서 가장 공급량이 많은 날짜의 밀가루를 공급받는 것이 문제의 핵심이다.

     

     

     

    소스코드

     

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    import java.util.*;
    class Solution {
        static PriorityQueue<Integer> q;
        public int solution(int stock, int[] dates, int[] supplies, int k) {
            int answer = 0;
            init();
            int index = 0;
            for(int i = 0; i<k; i++){
                if(index<dates.length && i == dates[index]){
                    q.offer(supplies[index++]);
                }
                
                if(stock == 0){
                    stock += q.poll();
                    answer++;
                }
                stock--;
            }
            return answer;
        }
        static void init(){
            q = new PriorityQueue<>(Collections.reverseOrder());
        }
    }
    cs

    java.util.<span

    댓글

Designed by Tistory.