라면공장

라면공장

2019, Jun 02    
  • https://programmers.co.kr/learn/courses/30/lessons/42629
  • 우선순위 큐를 이용하여 (라면 공급양, 라면 공급일) 중 라면 공급양이 최대인 것만 stock이 바닥나기 전에 계속 공급해주면 됩니다.
  • 알고리즘
    • day를 탐색 기준으로 두고 k일 까지 탐색합니다.
    • deque의 front값이 현재 탐색하는 day와 같으면 pq에 (공급량, 공급일)로 저장합니다.
    • 만약 stock이 0이라면 pq의 top을 stock에 저하고 공급횟수를 +1 카운트 합니다.

#include <iostream>
#include <vector>
#include <deque>
#include <queue>
#include <algorithm>

using namespace std;

typedef pair<int, int> pi;
#define supply first
#define day second

int solution(int stock, vector<int> dates, vector<int> supplies, int k) {
	int answer = 0;

	priority_queue<pi> pq;	
	deque<pi> dq(dates.size());
	for (int i = 0; i < dates.size(); ++i) {
		dq[i] = pi(supplies[i], dates[i]);
	}
	for (int d = 0; d < k; ++d) {

		if (dq.front().day == d) {
			pq.push(dq.front());
			dq.pop_front();
		}
		if (stock == 0) {
			pi here = pq.top();
			pq.pop();

			stock += here.supply;
			answer++;
		}
		stock--;
	}
	return answer;
}