배운것
- 문자랑 숫자랑 섞여있을 때 입력을 어떻게 하지 하고 막막할 수 있는데 새로운 구조체를 만들면 됨
- vector 만들어주고 뒤에 v(N) N 안붙여줬더니 컴파일 에러남
- for문을 N까지 돌리는데 당연한듯.
- cmp 리턴할때 오름차순은 < , 내림차순은 >
- 이해 안되면 외울수밖에 없다
정답풀이1
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
struct STU{
string name;
int kor, eng, math;
};
//정렬 함수에 사용할 함수
bool cmp(STU a, STU b) {
//국어도 같고 영어도 같고 수학도 같으면 이름 오름차순으로 정렬
if (a.kor == b.kor && a.eng == b.eng && a.math == b.math) return a.name < b.name;
//국어 같고 영어 같다면 수학 내림차순으로 정렬
if (a.kor == b.kor && a.eng == b.eng) return a.math > b.math;
//국어점수 같다면 영어 오름차순으로 정렬
if (a.kor == b.kor) return a.eng < b.eng;
//기본적으로 국어 내림차순으로 정렬
return a.kor > b.kor;
}
int main() {
int N;
cin >> N;
vector<STU> v(N);
for (int i=0; i<N; i++)
cin >> v[i].name >> v[i].kor >> v[i].eng >> v[i].math;
//sort함수 : v.begin() 부터 v.end를 cmp 함수대로 정렬
sort(v.begin(), v.end(), cmp);
for (int i = 0; i < N; i++)
cout << v[i].name << '\n';
}
참고
'Algorithm > C++' 카테고리의 다른 글
[백준 2573] 빙산 (0) | 2022.09.26 |
---|---|
[백준 1431] 시리얼 번호 (0) | 2022.09.25 |
[백준 11650] 좌표 정렬하기 (0) | 2022.09.23 |
[백준 15688] 수 정렬하기 5 (0) | 2022.09.21 |
[백준 18808] 스티커 붙이기 (0) | 2022.09.20 |
댓글