
각 학생들이 받은 점수들을 저장해서
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 |