문제
"맞았습니다."코드
#include <bits/stdc++.h>
using namespace std;
struct student{
string name;
int kor, eng, math;
};
int n, kor, eng, math;
string st;
vector<student> v;
bool cmp(student &a, student &b){
if(a.kor == b.kor && a.eng == b.eng && a.math == b.math) return a.name < b.name;
else if(a.kor == b.kor && a.eng == b.eng) return a.math > b.math; // 수학 감소하는 순서
else if(a.kor == b.kor) return a.eng < b.eng; // 영어 증가하는 순서
else return a.kor > b.kor; //국어 감소하는 순서
}
int main(void) {
ios::sync_with_stdio(0);
cin.tie(0);
cin >> n;
for(int i = 0; i < n; i++){
cin >> st >> kor >> eng >> math;
student s = {st, kor, eng, math};
v.push_back(s);
}
sort(v.begin(), v.end(), cmp);
for(auto i : v) cout << i.name << '\n';
return 0;
}
리뷰
비교 함수를 정확히 구현해야 맞을 수 있는 문제였다.
비교 함수를 작성할 때 조건이 구체적인 것 부터 걸러내야 한다.
그래서 '모든 점수가 같으면' 이름이 사전순 증가 하게 출력하라는 조건부터 if문을 시작해야 한다.
문제에서 나오는 조건 대로 작성했다가 처음 풀었을 때 틀렸다.
728x90
'알고리즘 > 백준' 카테고리의 다른 글
1,2,3 더하기 백준 9095번 c++ (0) | 2021.12.22 |
---|---|
시리얼 번호 백준 1431 c++ (0) | 2021.12.21 |
접미사 배열 백준 11656 c++ (0) | 2021.12.20 |
1로 만들기 백준 1463번 c++ (0) | 2021.12.20 |
먹을것인가 먹힐것인가 백준 7795 c++ (0) | 2021.12.20 |