[๋ฐฑ์ค] [C++] ๐ ๋ณด์ ๋๋ 1202๋ฒ
๐ก ๋ฌธ์ ์ค๋ช

๊ทธ๋ฆฌ๋ ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํด์ผ ํ๋ค. ์๋๋ฉด ๋ฌด์กฐ๊ฑด ์๊ฐ์ด๊ณผ ๋ฐ์.
๐ก ์ ๊ทผ ๋ฐฉ๋ฒ
์์ ๊ฐ๋ฐฉ๋ถํฐ ๋ด์์ผ ํ๋ค. -> ๊ฐ๋ฐฉ์ ์ ๋ ฌ
๊ฐ๋ฐฉ์ ๋ด์ ๋, ๊ฐ๋ฐฉ์ ๋ด์ ์ ์๋ ๊ฒ์ค์ ๊ฐ์ฅ ๊ฐ์น๊ฐ ๋์ ๊ฒ๋ถํฐ ๋ด์์ผ ๊ทธ๋ฆฌ๋ ์๊ณ ๋ฆฌ์ฆ์ด๋ค.
๐ก ์ฐ์ ์์ ํ๋ฅผ ์ด์ฉํ ํ์ด
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
#define FOR(i,a,b) for(int i=(a);i<=(b);i++)
#define MAX 300001
/*
๊ทธ๋ฆฌ๋ ์๊ณ ๋ฆฌ์ฆ์ ์ข์ ๋ฌธ์
๊ฐ๋ฐฉ์ ์ฉ๋์ด ์ฃผ์ด์ก์ ๋ ๋ด์ ์ ์๋ ๋ฌผํ์ค์ ๊ฐ์ฅ ๊ฐ์น๊ฐ ๋์ ๋ฌผํ์ ๋ด๋๋ค.
*/
int N, K;
pii jewerly[MAX];
int C[MAX];
priority_queue<int> pq;
int main(){
ios_base::sync_with_stdio(0); cin.tie(0);
cin >> N >> K;
for (int i=0; i<N; i++){
cin >> jewerly[i].first >> jewerly[i].second;
}
for (int i=0; i<K; i++){
cin >> C[i];
}
// ๋ฌด๊ฒ ์์ผ๋ก ์ ๋ ฌ
sort(jewerly, jewerly+N);
sort(C, C+K);
int idx = 0;
ll sum = 0;
// ์์ ๊ฐ๋ฐฉ๋ถํฐ ์ต์ ์ ๊ฐ์น๋ฅผ ๋ฃ๊ธฐ
for (int i = 0; i < K; i++) {
// ๋ฃ์ ์ ์๋ ๊ฒ๋ค pq์ ์ผ๋จ ๋ฃ๊ธฐ
while (idx < N) {
if (C[i] < jewerly[idx].first) break; // ๋ชป๋ด๋ ๋ฌด๊ฒ ๋์ค๋ฉด
pq.push(jewerly[idx].second);
idx++;
}
// ๋ฃ์ ์ ์๋ ๊ฒ์ค์ ๊ฐ์น๊ฐ ๊ฐ์ฅ ๋์ ๋ฌผ๊ฑด ๋ฃ๊ธฐ
// ๋๋จธ์ง๋ ๊ทธ๋๋ก ์ ์ฅํ๋๊ฒ ์ค์
if (!pq.empty()) {
sum += pq.top();
pq.pop();
}
}
cout << sum;
return 0;
}
๐ก ๋ง๋ฌด๋ฆฌ
๊ฐ๋ฐฉ์ ์์ ์์๋ก ์ ๋ ฌํ ํ, ๋ฃ์ ์ ์๋ ๋ณด์ ์ค์์ ๊ฐ์น๊ฐ ๋์ ๊ฒ๋ถํฐ ๋ฃ๋๋ค๋ ์๊ฐ์ด ๋งค์ฐ ํ๊ธฐ ์ด๋ ค์ ๋ค.
์ฐ์ ์์ ํ๋ฅผ ์ฌ์ฉํ๋ ๋ฌธ์ ๋ค์ ์ฐธ ์๊ฐํ๊ธฐ ์ด๋ ค์ด ๊ฒ ๊ฐ๋ค.
๊ทผ๋ฐ ์ฐธ ๋งค๋ ฅ์ ์ธ ๋ฌธ์ ์ธ๊ฒ ๊ฐ๋ค.