https://www.acmicpc.net/problem/1781
이 문제는 그리드 문제이다 처음에는 input값을 받을 때 인덱스 값을 변경 시켜줬는데 이렇게 풀면틀렸었다
이문제는 일단 데드라인상으로 오름 차순 정렬해준후 이값을 컵라면수의 값에 대한 오름차순 prorityQueue로 만든다 그후 값을 넣어 주면서 현재 size즉 내가 선택한 문제수 가 dealine 값 즉 문제를 풀수 있는 시간보다 많아지면 문제를 포기해야하기 때문에 가장 작은 값을 가지는 값을 pop해준다
#include <iostream>
#include <vector>
#include <queue>
#include <algorithm>
using namespace std;
int main() {
int n;
cin >> n;
vector<pair<int, int>> problems(n);
for (int i = 0; i < n; i++) {
cin >> problems[i].first >> problems[i].second; // (데드라인, 컵라면 수)
}
// 1. 데드라인 기준 오름차순 정렬
sort(problems.begin(), problems.end());
// 2. 최소 힙 사용 (컵라면 개수가 적은 것을 우선 제거)
priority_queue<int, vector<int>, greater<int>> pq;
for (auto& p : problems) {
int deadline = p.first;
int cupRamen = p.second;
pq.push(cupRamen); // 현재 문제를 풀어본다고 가정하고 넣음
// 3. 시간이 초과되면 가장 컵라면 개수가 적은 문제를 버림
if (pq.size() > deadline) {
pq.pop();
}
}
// 4. 남아있는 문제들의 컵라면 개수 합산
int ans = 0;
while (!pq.empty()) {
ans += pq.top();
pq.pop();
}
cout << ans << '\n';
return 0;
}
'백준(코테준비) > 그리디' 카테고리의 다른 글
백준 9576 (0) | 2025.02.22 |
---|---|
백준 2138 / C++ / 그리디준 2138 / C++ / 그리디 (0) | 2025.02.14 |
백준 10775 / C++ / 그리디 / 유니온 파인드 (0) | 2025.01.24 |
백준 3109 / c++ / 그리디 / dfs (0) | 2025.01.12 |
백준 2212 / cpp / c++ (0) | 2024.12.17 |