[백준/BOJ] 2109. 순회강연 [Gold 3]

jychan99·2022년 5월 11일
0
post-thumbnail
  1. 순회강연

문제출처 : https://www.acmicpc.net/problem/2109

code

#include <iostream>
#include <vector>
#include <algorithm>
#include <queue>
using namespace std;

int main()
{
	int n, result = 0;
	cin >> n;
	vector<pair<int, int>> v(n);
	priority_queue<int> pq;
	if (n == 0)
	{
		cout << result;
	}
	else
	{
		for (int i = 0; i < n; i++)
			cin >> v[i].second >> v[i].first;

		sort(v.begin(), v.end(),greater<>());

		int day = v[0].first;

		for(int i=0;i<=n && day>0;)
		{
			if (day == 0)
				break;
			if (i < n)
			{
				if (day == v[i].first)
				{
					pq.push(v[i].second);
					i++;
					continue;
				}
			}
			if (!pq.empty())
			{
				result += pq.top();
				pq.pop();
			}
			day--;
		}
		cout << result;
	}
	return 0;
}

주의할점
1. n은 0일수도있다.
2. 문제를 잘읽어보면 d일 안에까지라고 명시되어있다.
예를들어 d가 100 이면 1,2,3....100일까지 강연을 할수있다는 뜻이다.

주의할점 2번에 따르면 날짜를 1일부터 올라가면서 강연을 하면 될것같지만, 그렇게 하면 우선순위큐가 복잡해지기 때문에 날짜를 거꾸로 거슬로내려가면서 페이를 더해주면 훨씬편해질것이다.

나는 코드짤때 중간중간에 막 짜집기해서 코드가 지저분한데, 더 깔끔하게 짤 수 있을것 같다.

profile
내가 지금 두려워 하고 있는 일이 바로 내가 지금 해야 할 일이다. 🐥

0개의 댓글