๐ PS/Algorithm
[Baekjoon] 1202๋ฒ: ๋ณด์ ๋๋
hades1
2024. 9. 19. 19:46
๐ฅ ๋ฌธ์
https://www.acmicpc.net/problem/1202
๐ ์ค๊ณ
๊ฐ๋ฐฉ์๋ ๊ฐ๋ฐฉ์ด ๋ด์ ์ ์๋ ๋ฌด๊ฒ ์ดํ์ ๋ณด์๋ง ๋ด์ ์ ์๋ค. ๋ณด์์ ์ด๋ป๊ฒ ๋ด์์ง๊ฐ ๋ฌธ์ ๋ค.
๋ณด์๊ณผ ๊ฐ๋ฐฉ์ ๋ฌด๊ฒ๋ฅผ ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌํ๊ณ , ๊ฐ๋ฐฉ๋ง๋ค ๋ด์ ์ ์๋ ๋ณด์ ์ค ์ต๋ ๊ฐ์น๋ฅผ ๊ฒฐ๊ณผ์ ๋ํ๋ฉด ๋๋ค.
์ต๋ ๊ฐ์น๋ ์ฐ์ ์์ ํ๋ฅผ ์ด์ฉํ์ฌ ๊ตฌํ๋ค. ํ์ํ๋ ๋ณด์์ ๋ํ์ฌ ์ธ๋ฑ์ค๋ฅผ ๊ณต์ ํ๋ฉด, O(N+K)๋ก ํด๊ฒฐํ ์ ์๊ณ , ์ฐ์ ์์ ํ๋ฅผ ๊ณต์ ํจ์ผ๋ก์จ ๊ทธ ๊ฐ๋ฐฉ ์ต๋ ๋ฌด๊ฒ ์ดํ์ ๋ณด์์ ๊ณ ๋ คํ ์ ์๋ค.
๐ ํ์ด
#include <iostream>
#include <vector>
#include <queue>
#include <algorithm>
using namespace std;
int n, k, m, v, c, p = 0;
long long result = 0;
vector<pair<int, int>> jewel;
vector<int> bag;
priority_queue<int> possible;
int fillBag(int bag_idx) {
while (p < n && jewel[p].first <= bag[bag_idx]) {
possible.push(jewel[p++].second);
}
if (possible.empty()) {
return 0;
}
else {
int value = possible.top();
possible.pop();
return value;
}
}
int main(void)
{
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
cin >> n >> k;
for (int i = 0; i < n; i++) {
cin >> m >> v;
jewel.push_back({ m, v });
}
for (int i = 0; i < k; i++) {
cin >> c;
bag.push_back(c);
}
sort(jewel.begin(), jewel.end());
sort(bag.begin(), bag.end());
for (int i = 0; i < k; i++) {
result += fillBag(i);
}
cout << result << "\n";
return 0;
}