출처 : https://www.acmicpc.net/problem/10825
Sorting을 할 때, Compare함수를 조작할 수 있는지 묻는 문제이다.
#include <bits/stdc++.h>
#define fastio cin.tie(0)->sync_with_stdio(0)
using namespace std;
struct Score
{
string name;
int korean;
int english;
int math;
};
int N;
Score arr[100001];
bool comp(Score a, Score b)
{
// 세개의 점수가 다 같다면,
if (a.korean == b.korean && a.english == b.english && a.math == b.math)
return a.name < b.name;
if (a.korean == b.korean && a.english == b.english)
return a.math > b.math;
if (a.korean == b.korean)
return a.english < b.english;
return a.korean > b.korean;
}
int main()
{
fastio;
cin >> N;
Score tmp;
for (int i = 0; i < N; i++)
{
cin >> tmp.name >> tmp.korean >> tmp.english >> tmp.math;
arr[i] = tmp;
}
sort(arr, arr + N, comp);
for (int i = 0; i < N; i++)
{
cout << arr[i].name << '\n';
}
return 0;
}