알고리즘 풀이/프로그래머스
프로그래머스 - 라면공장
100win10
2019. 12. 1. 02:51
문제 : https://programmers.co.kr/learn/courses/30/lessons/42629
코딩테스트 연습 - 라면공장 | 프로그래머스
라면 공장에서는 하루에 밀가루를 1톤씩 사용합니다. 원래 밀가루를 공급받던 공장의 고장으로 앞으로 k일 이후에야 밀가루를 공급받을 수 있기 때문에 해외 공장에서 밀가루를 수입해야 합니다. 해외 공장에서는 향후 밀가루를 공급할 수 있는 날짜와 수량을 알려주었고, 라면 공장에서는 운송비를 줄이기 위해 최소한의 횟수로 밀가루를 공급받고 싶습니다. 현재 공장에 남아있는 밀가루 수량 stock, 밀가루 공급 일정(dates)과 해당 시점에 공급 가능한 밀가루 수량
programmers.co.kr
풀이 :
해당 날이 되면 밀가루를 pq에 추가해주어서 쓸 수 있도록 해주었다. 밀가루가 다 떨어지게 되면
가장 효율이 좋은 밀가루를 골라서 쓰게 된다.
코드(C++)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <string> | |
#include <vector> | |
#include <iostream> | |
#include <queue> | |
using namespace std; | |
int solution(int stock, vector<int> dates, vector<int> supplies, int k) { | |
int answer = 0; | |
priority_queue<int> pq; | |
int idx = 0; | |
for (int day = 0; ; day++) | |
{ | |
if (day == k) | |
break; | |
if (idx < dates.size() && dates[idx] == day) | |
{ | |
pq.push({ supplies[idx] }); | |
idx++; | |
} | |
if (stock == 0 && !pq.empty()) | |
{ | |
stock += pq.top(); | |
pq.pop(); | |
answer++; | |
} | |
stock--; | |
} | |
return answer; | |
} |