• 입력된 값들 중 점수를 기준으로 정렬한 후에 같은 점수에 대하여 마감일 기준으로 정렬한다.
  • 최대한의 점수를 가장 우선순위로 두고 마감일에 가장 가깝게 과제를 끝마치도록 한다.
  • 언제 어떠한 과제를 할 지를 저장하는 array에 가장 높은 점수부터 해당 마감일에 과제를 완료하는 것으로 가정하여 array에 저장한다.
  • 마감일이 같은 경우 마감일보다 작은 index 중에 지정되지 않는 array에 해당 과제를 저장한다.
  • 모든 과제에 대하여 저장이 끝나고 array내에 지정되어 있는 점수의 합을 구하여 출력한다.

코드

#include<iostream>
#include<algorithm>
#include<vector>
#include<utility>

using namespace std;

int main()
{
	int N;
	int d;
	int w;
	int answer = 0;
	vector<pair<int, int>> Score;
	cin >> N;
	int array[1000] = { 0 };

	for (int i = 0; i < N; i++){
		cin >> d >> w;
		Score.push_back(pair<int, int>(w, d));
	}
	
	sort(Score.begin(), Score.end());

	for (int i = N-1; i >= 0; i--)
	{
		while(Score[i].second>-1)
		{
			if (array[Score[i].second - 1] == 0) {
				array[Score[i].second - 1] = Score[i].first;

				break;
			}
			else
				Score[i].second--;
		}
	}
	for (int i = 0; i < 1000; i++)
	{
		answer += array[i];
	}

	cout << answer << endl;

	return 0;
}

결과

'알고리즘' 카테고리의 다른 글

[BAEKJOON 1074번] (C++) Z  (0) 2020.09.15
[BAEKJOON 1992번] (C++) 쿼드트리  (0) 2020.09.15
[BAEKJOON 4796번] (C++) 캠핑  (0) 2020.09.07
[BAEKJOON 1520번] (C++) 내리막 길  (0) 2020.09.07
[BAEKJOON 1449번] (C++) 수리공 항승  (0) 2020.09.07

+ Recent posts