티스토리 뷰
문제링크 : 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;
}
조건이 주어진 정렬문제이다.
단순 정렬이 아니라 정렬 조건에 맞춰서 이를 커스텀해줘야 한다.
조건은 문제에 전부 나와있으므로 오름차순인지 내림차순인지 확인하고 조건을 맞춰주면 된다.
'백준 > 실버' 카테고리의 다른 글
[백준 12847번] 꿀 아르바이트 (C++) (0) | 2023.09.22 |
---|---|
[백준 11052번] 카드 구매하기 (C++) (0) | 2023.09.19 |
[백준 1946번] 신입 사원 (C++) (0) | 2023.09.15 |
[백준 1254번] 팰린드롬 만들기 (C++) (0) | 2023.09.05 |
[백준 1205번] 등수 구하기 (C++) (0) | 2023.09.03 |