백준/실버
[백준 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;
}
조건이 주어진 정렬문제이다.
단순 정렬이 아니라 정렬 조건에 맞춰서 이를 커스텀해줘야 한다.
조건은 문제에 전부 나와있으므로 오름차순인지 내림차순인지 확인하고 조건을 맞춰주면 된다.