2822번: 점수 계산
8개 줄에 걸쳐서 각 문제에 대한 참가자의 점수가 주어진다. 점수는 0보다 크거나 같고, 150보다 작거나 같다. 모든 문제에 대한 점수는 서로 다르다. 입력으로 주어지는 순서대로 1번 문제, 2번 문
www.acmicpc.net
문제 정리
- 참가자의 8문제 당 점수를 입력 받음
- 점수의 상위 5개가 최종 점수 , 최종 점수 출력
- 상위 5개에 해당하는 문제 번호 출력
접근법
1. 최종 점수 구하기 : 참가자의 점수를 배열에 저장 → sort()로 내림차순 정렬
sort(input_score, input_score + 8, greater<int>());
sort()는 오름차순 정렬 , 내림차순 정렬을 위해 greater()
최종 점수 = 정렬된 input_score을 0~4 인덱스까지 더하기
2. 맞힌 문제 번호 구하기 : 상위 5개의 점수에 해당하는 인덱스 + 1 = 문제 번호
find() 사용
for (int i = 0; i < 5; i++) {
int index_Q = find(score.begin(), score.end(), input_score[i]) - score.begin();
index[i] = index_Q + 1; //인덱스 값이라 1씩 더해줌
}
sort(index, index + 5); //앞 번호부터 출력해야하므로 sort 오름차순 정렬
find()함수 사용을 위해 input_score를 score벡터에 그대로 복사
#include <vector>
int main() {
int input_score[8] = { 0, }; //배열 선언
vector<int> score; //벡터 선언
for (int i = 0; i < 8; i++) {
cin >> input_score[i];
score.push_back(input_score[i]);
}
}
전체코드 : 🌱무콩
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int main() {
int input_score[8] = { 0, };
vector<int> score;
//점수 입력받기
for (int i = 0; i < 8; i++) {
cin >> input_score[i];
score.push_back(input_score[i]);
}
//내림차순 정렬
sort(input_score, input_score + 8, greater<int>());
int final_score = 0;
int index[5] = { 0, };
//최상위 점수 5개 더하기
for (int i = 0; i < 5; i++) {
final_score += input_score[i];
// 상위 5위에 해당하는 문제 번호 찾기, 인덱스 찾기
int index_Q = find(score.begin(), score.end(), input_score[i]) - score.begin();
index[i] = index_Q + 1;
}
cout << final_score << endl;
sort(index, index + 5);
for (int i = 0; i < 5; i++) {
cout << index[i] << " ";
}
return 0;
}
'🖥️ 오늘의 백준' 카테고리의 다른 글
백준 2776번 : 암기왕 [C++] (0) | 2023.04.02 |
---|---|
오늘의 백준 - 2491번 : 수열 [C++] (0) | 2023.03.31 |
오늘의 백준 - 2217번 : 로프 [C++] (0) | 2023.03.29 |
오늘의 백준 - 16650번: 좌표 정렬하기 [C++] (0) | 2023.03.29 |
오늘의 백준 - 2417번 : 정수 제곱근 [C++] (0) | 2023.03.29 |