본문 바로가기

🖥️ 오늘의 백준

오늘의 백준 - 2822번 : 점수 계산 [C++]

백준 2822번: 점수 계산

 

2822번: 점수 계산

8개 줄에 걸쳐서 각 문제에 대한 참가자의 점수가 주어진다. 점수는 0보다 크거나 같고, 150보다 작거나 같다. 모든 문제에 대한 점수는 서로 다르다. 입력으로 주어지는 순서대로 1번 문제, 2번 문

www.acmicpc.net

문제 정리

  1. 참가자의 8문제 당 점수를 입력 받음
  2. 점수의 상위 5개가 최종 점수 , 최종 점수 출력
  3. 상위 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;
}