본문 바로가기

알고리즘/백준

[백준 / 2822] 점수 계산 - C++

www.acmicpc.net/problem/2822

 

2822번: 점수 계산

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

www.acmicpc.net

 

문제 : 상근이는 퀴즈쇼의 PD이다. 이 퀴즈쇼의 참가자는 총 8개 문제를 푼다. 참가자는 각 문제를 풀고, 그 문제를 풀었을 때 얻는 점수는 문제를 풀기 시작한 시간부터 경과한 시간과 난이도로 결정한다. 문제를 풀지 못한 경우에는 0점을 받는다. 참가자의 총 점수는 가장 높은 점수 5개의 합이다. 

상근이는 잠시 여자친구와 전화 통화를 하느라 참가자의 점수를 계산하지 않고 있었다. 참가자의 8개 문제 점수가 주어졌을 때, 총 점수를 구하는 프로그램을 작성하시오.

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

출력 : 첫째 줄에 참가자의 총점을 출력한다. 둘째 줄에는 어떤 문제가 최종 점수에 포함되는지를 공백으로 구분하여 출력한다. 출력은 문제 번호가 증가하는 순서이어야 한다.

 

 

 

그냥 문제를 읽고 구현하면 되는 문제이다. 문제 번호 따로 문제 점수 따로 다룰수도 있겠지만 배열로 문제 번호와 점수를 같이 저장할 수 있는 방법을 생각해보다 vector<pair<int,int>>로 하면 좋겠다는 생각이 들어 그것과 sort를 이용해 구현하였다.

 

처음 입력 받을때 pair로 받은 뒤, 점수가 큰 순서대로 정렬을 해 주고, 그 큰 순서대로 5개의 점수를 sum에 저장해준다. 이때 sum에 점수를 더해서 저장하는 동시에 num vector에 문제 번호를 넣어준다. 그 뒤 num vector을 정렬해주고 문제에 맞게 출력하면 된다.

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

int main(){
        vector<pair<int, int>> v(8);
        int sum = 0;
        vector<int> num;
        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>>());
        
        for (int i = 0; i < 5; i++){
            sum += v[i].first;
            num.push_back(v[i].second);

        }
        cout << sum << "\n";
        sort(num.begin(), num.end());
        for (int i = 0; i < num.size(); i++){
            cout << num[i] << " ";
        }
}

오랫만에 하려니까 문제 푸는거나 설명이나 쉽지 않다...