본문 바로가기
알고리즘/프로그래머스

[ 프로그래머스 / 우선순위큐 ] 라면공장

by 뎁꼼 2020. 6. 30.

1. 문제


 

 

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

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

programmers.co.kr

 

 

2. 소스코드


- 개인적으로 불호인 문제.

- 밀가루 공급 일정(dates)과 해당 시점에 공급 가능한 밀가루 수량(supplies), 라고 문제에 정의되어 있는데, 정작 풀이는 해당 날짜 이후 언제든지 그 만큼을 공급받을 수 있다.

- 그러니까 <3일날, 10개를 공급 받을 수 있다>는 의미랑, <3일 이후에는 언제나 10개를 공급받을 수 있다>는 의미는 천지 차이인데 문제는 이를 애매하게 서술해놓았다.

- 후자의 의미로 풀어야 AC를 받는다.

 

소스코드

#include <string>
#include <vector>
#include <queue>
using namespace std;

int solution(int stock, vector<int> dates, vector<int> supplies, int k) {
    int answer = 0;
    int idx = 0;
    priority_queue<int> pq;
    
    for(int day = 0; day < k; ++day){
       
        if(idx < dates.size()){
            if(day >= dates[idx]){
                pq.push(supplies[idx]);
                idx++;
            }
        }
        if(stock == 0){
            stock += pq.top();
            pq.pop();
            answer++;
        }
         stock--;
    }
    return answer;
}