백준/실버

[백준 10825번] 국영수 (C++)

게임개발기원 2023. 9. 16. 12:53

문제링크 : https://www.acmicpc.net/problem/10825

 

10825번: 국영수

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

www.acmicpc.net

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int, int> pii;
const int MAX = 987654321;

struct p
{
    string name;
    int korean, english, math;
};

vector<p>v;
bool cmp(p a, p b)
{
    if(a.korean==b.korean && a.english == b.english && a.math == b.math) return a.name < b.name; //4번 조건(오름차순)
    if(a.korean==b.korean && a.english == b.english) return a.math > b.math; //3번 조건 (내림차순)
    if(a.korean==b.korean) return a.english < b.english; //2번 조건 (오름차순)
    return a.korean > b.korean; //1번 조건 (내림차순)
}

int main()
{
    ios_base::sync_with_stdio(0); 
	cin.tie(0);

    int N;
    cin >> N;
    v.resize(N);
    for(int i=0; i<N; i++)
    {
        cin >> v[i].name >> v[i].korean >> v[i].english >> v[i].math;
    }
    sort(v.begin(), v.end(), cmp);
    
    for(int i=0; i<N; i++)
    {
        cout <<v[i].name << "\n";
    }

    return 0;
}

조건이 주어진 정렬문제이다.

단순 정렬이 아니라 정렬 조건에 맞춰서 이를 커스텀해줘야 한다.

 

조건은 문제에 전부 나와있으므로 오름차순인지 내림차순인지 확인하고 조건을 맞춰주면 된다.