문제 출처:https://www.acmicpc.net/problem/2822
문제 분석
이 문제는 총 8개의 점수 중 가장 큰 5개의 합을 출력하고 각각의 순서를 출력하면 됩니다. 다만 순서를 출력할 때는 오름차순으로 두어야하기 때문에 저는 이 문제를 풀기 위해서 sort를 2번 사용했습니다.
- 각 점수들을 pair형태로 <점수, 순서>를 입력합니다
- pair를 내림차순으로 정렬합니다
- 가장 큰 5가지의 숫자들을 사용하기 때문에 5가지의 숫자들로 sum을 구하고, 그 숫자들의 순서들을 벡터에 입력합니다.
- 순서들이 저장된 vector를 오름차순으로 정렬합니다.
Time Complexity : ${O(nlg{n})}$
코드는 다음과 같습니다:
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std ;
int main(){
ios::sync_with_stdio(false) ;
cin.tie(NULL); cout.tie(NULL) ;
int sum = 0 ;
vector<pair<int, int>> grades(8) ;
vector<int> answer ;
for(int i = 0 ; i < 8 ; i++){
cin >> grades[i].first ;
grades[i].second = i + 1 ;
}
sort(grades.rbegin(), grades.rend()) ;
for(int i = 0 ; i < 5 ; i++){
sum += grades[i].first ;
answer.push_back(grades[i].second) ;
}
sort(answer.begin(), answer.end()) ;
cout << sum << "\n" ;
for(auto num : answer)
cout << num << " " ;
return 0 ;
}
해당 문제는 Github에서도 보실 수 있습니다:
https://github.com/gurcks8989/CodingTest/blob/master/BaekJoon/P02822.cpp
훈수 및 조언은 언제든 환영입니다.