๐Ÿ‘Š 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;
}