- 입력된 값들 중 점수를 기준으로 정렬한 후에 같은 점수에 대하여 마감일 기준으로 정렬한다.
- 최대한의 점수를 가장 우선순위로 두고 마감일에 가장 가깝게 과제를 끝마치도록 한다.
- 언제 어떠한 과제를 할 지를 저장하는 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;
}
결과