본문 바로가기

Algorithm/Sorting

(C++) - 백준(BOJ) 10825번 : 국영수 답

반응형

www.acmicpc.net/problem/10825

 

10825번: 국영수

첫째 줄에 도현이네 반의 학생의 수 N (1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 한 줄에 하나씩 각 학생의 이름, 국어, 영어, 수학 점수가 공백으로 구분해 주어진다. 점수는 1보다 크거나 같고, 1

www.acmicpc.net

정렬 문제였습니다.

 

풀이방법

 stl에서 sort함수를 사용할 때 정렬 기준을 커스터마이징할 수 있습니다.

 

 

Code

#include <bits/stdc++.h>
using namespace std;
int n;
struct Student { string name; int korean, english, math; };
vector <Student> v;

bool cmp(Student &a, Student &b){
    if(a.korean == b.korean){
        if(a.english == b.english) {
            if(a.math == b.math) return a.name < b.name;
            return a.math > b.math;
        }
        return a.english < b.english;
    }
    return a.korean > b.korean;
}

int main(){
    cin >> n;
    for(int i = 0; i < n; i++){
        string name;
        int korean, english, math;
        cin >> name >> korean >> english >> math;
        v.push_back({name,korean,english,math});
    }
    sort(v.begin(),v.end(),cmp);

    for(auto &s : v) cout << s.name << '\n';
}