https://programmers.co.kr/learn/courses/30/lessons/42629
Heap , LV2
해당 문제는 Heap으로 해결하였다.
day라는 날짜를 세는 변수를 주고 day와 stock을 통해 상황을 시뮬레이션한다.
그러다 date를 지나면 할 수 있었던 계약들을 heap에 넣고 stock이 0이 되는 순간 할 수 있었던 계약 중 가장 많은 양의 계약을 heap으로부터 뽑아온다. 이러한 구조로 계약을 몇번 해야하는지를 반환하면 된다.
#include <string>
#include <vector>
#include <queue>
using namespace std;
int solution(int stock, vector<int> dates, vector<int> supplies, int k) {
int answer = 0;
priority_queue<int, vector<int>, less<int>> pq;
// 날짜 맞춰서 진행
int day = 0, idx = 0;
while(day < k){
// 수입을 고려할 수 있으면
if(day >= dates[idx]){
pq.push(supplies[idx]);
idx = idx +1;
}
// stock이 다 떨어지면 가장 큰 밀가루 충전
if(stock == 0){
stock += pq.top();
pq.pop();
answer++; // 한 개 더 사용
}
day++; // 하루 지남
stock--; // 하루 지남
}
return answer;
}
'Archived(CSE Programming) > 알고리즘(C++)' 카테고리의 다른 글
프로그래머스_다리를 지나는 트럭 (2) | 2019.11.20 |
---|---|
프로그래머스_탑 (0) | 2019.11.20 |
프로그래머스_H-Index (0) | 2019.11.19 |
프로그래머스_가장 큰 수 (0) | 2019.11.19 |
프로그래머스_프린터 (0) | 2019.11.19 |