https://www.acmicpc.net/problem/2822
2822번: 점수 계산
8개 줄에 걸쳐서 각 문제에 대한 참가자의 점수가 주어진다. 점수는 0보다 크거나 같고, 150보다 작거나 같다. 모든 문제에 대한 점수는 서로 다르다. 입력으로 주어지는 순서대로 1번 문제, 2번 문
www.acmicpc.net
🔔 문제 :
(0<= N <= 150)인 8개의 점수 N이 입력으로 주어집니다.
그중 가장 큰 점수 5개의 합과, 그 점수들의 순서를 오름차순 순으로 출력하는 문제입니다.
🔔 Kick Point :
저는 pair과, sort를 이용을 하였는데, 좀 복잡하게 짜인 것 같네요
pair을 이용하여 각각의 점수에 (점수,인덱스)를 입력값을 받습니다.
sort 알고리즘을 이용하여, 점수별로 정렬 후, 가장 큰 5개의 점수 합을 담아둡니다.
이후, 큰 점수들의 인덱스를 정렬해줍니다.
그 다음 점수 합, 인덱스 오름차순으로 출력해주었습니다.
🔔 Code :
#include <iostream>
#include <algorithm>
using namespace std;
bool compare(const pair<int, int>& a, const pair<int, int>& b) {
return a.second < b.second;
}
int main() {
pair<int, int> p[9];
for (int i = 1; i <= 8; i++) {
cin >> p[i].first;
p[i].second = i;
}
sort(p + 1, p + 9);
int total(0);
for (int i = 4; i <= 8; i++) {
total += p[i].first;
}
cout << total << endl;
sort(p + 4, p + 9, compare);
for (int i = 4; i <= 8; i++) {
cout << p[i].second << " ";
}
}