본문 바로가기

문제 풀이/문제 풀이(BOJ)

[Silver V] 점수 계산 - 2822

[문제 위치]

https://www.acmicpc.net/status?from_mine=1&problem_id=2822&user_id=unlock546

[문제 풀이]

이 코드는 총 8개의 문제 점수 중 상위 5개의 점수를 선택하여 그 합계를 계산하고, 해당 점수에 대응하는 문제 번호를 오름차순으로 출력하는 기능을 수행한다.

입력된 점수는 각 문제 번호와 함께 pair 형태로 벡터에 저장된다. 이후 점수를 기준으로 내림차순 정렬을 수행하고, 상위 5개의 점수를 선택하여 합계를 구한다. 이때 선택된 문제 번호는 별도로 저장되며, 최종적으로 오름차순 정렬을 거쳐 출력된다.

#include <iostream>
#include <vector>
#include <algorithm>
#include <functional>
using namespace std;

ios_base::sync_with_stdio(0);

cin.tie(0); 

int main(void)

{


 

        vector<pair<int, int>> v(8); //{score, idx}

        for (int i = 0; i < 8; i++)

        {

                 cin >> v[i].first;

                 v[i].second = i + 1;

        }

        //내림차순 정렬

        sort(v.begin(), v.end(), greater<pair<int, int>>());

 

        int sum = 0;

        vector<int> idx; //몇 번째 문제?

        for (int i = 0; i < 5; i++)

        {

                 sum += v[i].first;

                 idx.push_back(v[i].second);

        }

       

        cout << sum << "\n";

 

        //문제는 오름차순 정렬

        sort(idx.begin(), idx.end());

        for (int i = 0; i < idx.size(); i++)

                 cout << idx[i] << " ";

        cout << "\n";

        return 0;

}