정렬하는 문제이다. C++에서 정렬하는 라이브러리는 algorithm을 쓰면된다. C++에서 쓰이는 정렬 알고리즘은 nlogn의 시간복잡도를 가진다고 하였는데, 정확한지는 모르겠다. 여튼 comp함수를 이용해 정렬 함수를 커스텀해 사용하는 연습을 하였다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
bool comp(const P &a,const P &b){
if(a.kor > b.kor)
return true;
else if(a.kor == b.kor){
if(a.eng < b.eng)
return true;
else if(a.eng == b.eng){
if(a.math > b.math)
return true;
else if(a.math == b.math){
if(a.name < b.name)
return true;
}
}
}
return false;
}
|
cs |
해당 함수에서 true가 반환되면 잘 정렬이 되있는거고 false면 정렬이 안되어 있는 상태이므로 정렬해준다고 생각하면 된다. 첫번째 if문은 내림차순 두번쨰는 오름차순 세번쨰는 내림차순 네번쨰는 오름차순이라고 생각하면 된다.
전체코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
|
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
struct P{
string name;
int kor, eng, math;
};
bool comp(const P &a,const P &b){
if(a.kor > b.kor)
return true;
else if(a.kor == b.kor){
if(a.eng < b.eng)
return true;
else if(a.eng == b.eng){
if(a.math > b.math)
return true;
else if(a.math == b.math){
if(a.name < b.name)
return true;
}
}
}
return false;
}
int main(void){
int n;
vector<P> group;
cin >> n;
for(int i = 0; i < n;i++){
string nm;
int k, e, m;
cin >> nm >> k >> e >> m;
group.push_back({nm, k, e, m});
}
stable_sort(group.begin(), group.end(), comp);
for(P a : group){
cout << a.name << "\n";
}
}
|
cs |
728x90
'개발 > 알고리즘' 카테고리의 다른 글
10820_문자열분석 (0) | 2020.11.15 |
---|---|
11004_K번째 수 (0) | 2020.11.15 |
20057_마법사 상어와 토네이도 (0) | 2020.11.03 |
2133_Tri Tiling(DP) (0) | 2020.10.31 |
11726번: 2×n 타일링 (0) | 2020.10.25 |