-
[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이 되는 시점에서 큐에서 가장 공급량이 많은 날짜의 밀가루를 공급받는 것이 문제의 핵심이다.
소스코드
123456789101112131415161718192021222324import 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 'Algorithm > Programmers' 카테고리의 다른 글
[Programmers] 2020카카오공채 문자열 압축 (0) 2020.08.24 [Programmers] 카카오프렌즈 컬러링북 (0) 2020.06.16 [Programmers] 괄호 변환 (0) 2020.06.02 [Programmers] 전화번호 목록 (0) 2020.06.01 [Programmers] 멀쩡한 사각형 (0) 2020.06.01