1. 풀이방법
- algorithm 라이브러리 내에 정의되어있는 sort를 사용하였습니다.
- 이를 사용한다는 가정하에 cmp함수를 원하는 대로 작성할 수 있는지를 물어보는 문제인 것 같습니다.
- 조건 그대로 작성해주시면 됩니다.
- 코드의 길이를 줄일 수 있지만 저는 보통 아래의 코드의 형식을 벗어나게 작성하지는 않습니다.
- 이 문제처럼 이것만을 물어보기 위한 경우가 아닌 경우 보통 이렇게까지 분류조건이 많이 달리지는 않는데 그랬을 때
코드 한 두줄 정도 더 길지만 저 같은 경우 의미 파악이 그게 더 분명히 되서 실수할 가능성도 줄고 해서 그대로 작성
하는 편입니다.
2. 주의사항
- 증가순, 감소순 정확히 구별
3. 나의코드
#include<iostream>
#include<vector>
#include<algorithm>
#include<string>
using namespace std;
int N;
struct studentscore {
int kor; int eng; int mat;
string name;
};
vector<studentscore> studentarr;
bool cmp(studentscore s1, studentscore s2) {
if (s1.kor > s2.kor) { return true; }
else if(s1.kor==s2.kor){
if (s1.eng < s2.eng) return true;
else if (s1.eng == s2.eng) {
if (s1.mat > s2.mat) return true;
else if (s1.mat == s2.mat) {
if (s1.name< s2.name) return true;
return false;
}
else return false;
}
else return false;
}
else return false;
}
void inputs() {
cin >> N;
for (int i = 0; i < N; i++) {
studentscore tmps;
cin >> tmps.name >> tmps.kor >> tmps.eng >> tmps.mat;
studentarr.push_back(tmps);
}
}
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL); cout.tie(NULL);
inputs();
sort(studentarr.begin(), studentarr.end(), cmp);
for (int i = 0; i < studentarr.size(); i++) {
cout << studentarr[i].name << "\n";
}
return 0;
}
'알고리즘 문제풀이 > 정렬' 카테고리의 다른 글
백준 1620 [C++] (0) | 2021.01.09 |
---|---|
백준 2887 [C++] (0) | 2020.10.27 |
백준 10814 (0) | 2020.03.02 |
백준 1181 (0) | 2020.01.15 |
백준 1427 (0) | 2020.01.08 |