[백준/BOJ] 백준 9869번 : Milk Scheduling
2023. 10. 25. 21:03ㆍ알고리즘 문제풀이
https://www.acmicpc.net/problem/9869
9869번: Milk Scheduling
Farmer John has N cows that need to be milked (1 <= N <= 10,000), each of which takes only one unit of time to milk. Being impatient animals, some cows will refuse to be milked if Farmer John waits too long to milk them. More specifically, cow i produces g
www.acmicpc.net
가장 뒤 날짜부터, 마감 날짜가 해당 날짜 이상인 소들 중 가장 많이 우유를 만들 수 있는 소를 고르는 방법으로 문제를 해결했다. 가장 뒤 날짜부터 고르면 이전에 우선순위 큐(가장 많은 우유를 만드는 게 먼저 나오는 우선순위 큐)에 넣어 놨던 소들이 앞에 날짜에서 사용될 수 있다.
코드
#include <iostream>
#include <algorithm>
#include <vector>
#include <queue>
using namespace std;
int n;
vector<pair<int, int>> cow; //(마감시간, 만들 수 있는 우유)
int max_day = 0;
int main()
{
cin.tie(NULL);
ios_base::sync_with_stdio(false);
cin >> n;
for (int i = 0; i < n; i++) {
int gi, di;
cin >> gi >> di;
cow.push_back(make_pair(di, gi));
max_day = max(max_day, di);
}
//마감 날짜 기준으로 정렬
sort(cow.begin(), cow.end());
int cow_index = cow.size() - 1;
//날짜를 거꾸로 확인하면서 마감날짜 day일때, 마감날짜가 day 이상인 소들 중 가장 많이 우유를 만들 수 있는 소를 고른다
int result = 0;
priority_queue<int> pq;
for (int day = max_day; day >= 1; day--) {
while (cow_index >= 0) {
if (cow[cow_index].first >= day) {
pq.push(cow[cow_index].second);
cow_index--;
}
else {
break;
}
}
if (!pq.empty()) {
result += pq.top();
pq.pop();
}
}
cout << result;
return 0;
}
'알고리즘 문제풀이' 카테고리의 다른 글
[백준/BOJ] 백준 7535번 : A Bug’s Life (0) | 2023.10.25 |
---|---|
[백준/BOJ] 백준 13147번 : Dwarves (0) | 2023.10.25 |
[백준/BOJ] 백준 14167번 : Moocast (0) | 2023.10.25 |
[백준/BOJ] 백준 5873번 : Distant Pastures (0) | 2023.10.25 |
[백준/BOJ] 백준 14953번 : Game Map (0) | 2023.10.25 |