Notice
Recent Posts
Recent Comments
Link
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
Archives
Today
Total
관리 메뉴

발전하는 개발자가 되자

프로그래머스 알고리즘 : 라면공장 (java) 본문

개발공부/알고리즘

프로그래머스 알고리즘 : 라면공장 (java)

백경훈 2019. 3. 12. 14:15

프로그래머스 알고리즘 (java)

라면 공장

프로그래머스 (라면 공장)

코드 리뷰

현재 공장에 남아있는 밀가루 수량 stock, 밀가루 공급 일정(dates)과 해당 시점에 공급 가능한 밀가루 수량(supplies), 원래 공장으로부터 공급받을 수 있는 시점 k가 주어질 때, 밀가루가 떨어지지 않고 공장을 운영하기 위해서 최소한 몇 번 해외 공장으로부터 밀가루를 공급받아야 하는지를 return 하도록 solution 함수를 완성하세요.

조건

  • stock에 있는 밀가루는 오늘(0일 이후)부터 사용됩니다.
  • stock과 k는 2 이상 100,000 이하입니다.
  • dates의 각 원소는 1 이상 k 이하입니다.
  • supplies의 각 원소는 1 이상 1,000 이하입니다.
  • dates와 supplies의 길이는 1 이상 20,000 이하입니다.
  • k일 째에는 밀가루가 충분히 공급되기 때문에 k-1일에 사용할 수량까지만 확보하면 됩니다.
  • dates에 들어있는 날짜는 오름차순 정렬되어 있습니다.
  • dates에 들어있는 날짜에 공급되는 밀가루는 작업 시작 전 새벽에 공급되는 것을 기준으로 합니다. 예를 들어 9일째에 밀가루가 바닥나더라도, 10일째에 공급받으면 10일째에는 공장을 운영할 수 있습니다.
  • 밀가루가 바닥나는 경우는 주어지지 않습니다.

풀이 방향

저는 날짜를 기준으로 풀었습니다.

날짜를 for문의 기준으로 삼고 현재 날짜와( i ) 해외에서 배송해 줄 수 있는 날짜( dates ) 를 비교해 같은 날이면 우선순위 큐에 담았습니다.

그리고 날짜와 현재 가지고 있는 밀가루량( stock ) 이 같으면 가장 많은량의 밀가루를 가져오게 했습니다.

import java.util.Comparator;
import java.util.PriorityQueue;

class Solution {
   public int solution(int stock, int[] dates, int[] supplies, int k) {
        int answer = 0;
        PriorityQueue<Integer> priorityQueue = new PriorityQueue<>(Comparator.reverseOrder());
        int index = 0;
        for (int i = 0; i < k; i++) {
            if (index < dates.length) {
                if (i == dates[index]) {
                    priorityQueue.offer(supplies[index]);
                    index ++;
                }
            }

            if (i == stock) {
                stock += priorityQueue.remove();
                answer ++;

            }

        }

        return answer;
    }
}


Comments