-
Notifications
You must be signed in to change notification settings - Fork 0
/
10825.cpp
69 lines (56 loc) · 1.44 KB
/
10825.cpp
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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
#include <stdio.h>
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int N; // 도현이네 반 학생 수.
struct grade
{
char name[101];
int kor;
int eng;
int math;
};
vector<grade> list;
bool name_order(const char u_name[101],const char v_name[101])
{
int i=0;
while(u_name[i]==v_name[i])
{
i++;
}
if(u_name[i]<v_name[i])
return true;
else
return false;
}
bool cmp(const grade &u, const grade &v)
{
if( u.kor > v.kor ) // 1. 국어 점수가 감소하는 순서로
return true;
else if( (u.kor == v.kor) && (u.eng != v.eng) ) // 2. 국어 점수가 같으면
return u.eng < v.eng; // 영어 점수가 증가하는 순서로
else if( (u.kor == v.kor) && (u.eng == v.eng) && (u.math != v.math) ) // 3. 국어 점수와 영어 점수가 같으면
return u.math > v.math; // 수학 점수가 감소하는 순서로
else if( (u.kor == v.kor) && (u.eng == v.eng) && (u.math == v.math) ) // 4. 모든 점수가 같으면
return name_order(u.name,v.name); // 이름이 사전 순으로 증가하는 순서로
else
return false;
}
int main()
{
scanf("%d",&N);
list.resize(N);
for(int i=0;i<N;i++)
{
scanf("%s %d %d %d",list[i].name,&list[i].kor,&list[i].eng,&list[i].math);
}
sort(list.begin(),list.end(),cmp); // cmp 대로 퀵소트.
for(int i=0;i<N;i++)
{
printf("%s",list[i].name);
if(i<N)
printf("\n");
}
return 0;
}