본문 바로가기

백준 문제풀기/C++

[백준 15702 C++] 중간고사 채점

각 학생들이 받은 점수들을 저장해서

1. 점수가 가장 높은 학생 기준

2. 번호가 가장 낮은 학생 기준

으로 정렬을 하는 문제입니다

 

학생 번호와, 학생 점수가 필요하니깐

Mx2 행렬을 만들어줬습니다

 

코드입니다

#include <iostream>
#include <vector>
#include <algorithm>
// sort 함수는 algorithm헤더에 들어있습니다

using namespace std;

bool compareY(const pair<int, int>& a, const pair<int, int>& b) { // 정렬함수를 정의해줬습니다
    if (a.second == b.second) { // 점수가 같으면 번호가 낮은거 기준으로
        return a.first < b.first;
    }
    return a.second > b.second; // 점수 기준으로
}

int main(void) {
    int n, m;

    cin >> n >> m;

    vector<pair<int, int>> students(m, make_pair(0, 0)); // make_pair(0,0)은 초기값 설정입니다
    int scores[n];

    for (int i = 0; i < n; i++) { // 각 문제의 배점을 입력해줍니다
        cin >> scores[i];
    }

    for (int i = 0; i < m; i++) {
        cin >> students[i].first; //first에는 학생 번호가 저장됩니다

        for (int j = 0; j < n; j++) {
            char c;
            cin >> c;

            if (c == 'O') { // 맞았을 경우만 그 문제의 배점을 더해줍니다
                students[i].second += scores[j];
            }
        }
    }

    sort(students.begin(), students.end(), compareY); // 정렬과정입니다

    int max_y = students[0].second;
    int max_x = students[0].first;

    cout << max_x << " " << max_y << endl;

    return 0;
}

'백준 문제풀기 > C++' 카테고리의 다른 글

[백준 2810 C++] 컵홀더  (0) 2023.09.04
[백준 4344 C++] 평균은 넘겠지  (0) 2023.09.04