반응형

문제 출처 :


https://www.acmicpc.net/problem/10825



알고리즘 분석 :


문제 해결에 필요한 사항

1. sort 알고리즘

2. 정렬 구현


algorithm 헤더를 이용하여 sort 함수를 쓰고, 함수 정렬 방식 정의에서 어떻게 이 정렬을 구현하면 될 지 생각하면 되는 문제이다.


comp함수를 작성할 때 고려할 것은 다음과 같다.


1. 국어 점수가 다를 경우 내림차순 정렬

2. 국어 점수가 같을 경우 영어 점수 오름차순 정렬

3. 국, 영 점수가 같을 경우 수학 점수 내림차순 정렬

4. 국, 영, 수 점수가 모두 같을 경우 이름 사전 순 정렬


이때 이 코드를 그대로 옮기면 안되고


순서를 1 - > 4 -> 3 -> 2 방식으로 옮겨야 한다.


왜냐면 만약 2번이 4번보다 먼저 앞서게 있다면


국어 점수가 같은 경우에만 판단하기 때문에 영, 수도 같을 수도 있기 때문이다.


즉, 국, 영, 수가 모두 같으면 사전 순으로 정렬해야 하지만, 국어 점수가 같다는 것만 판단하고 영어 점수 오름차순 정렬을 해 버릴 수도 있기 때문이다.


소스 코드 : 


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
 
/* 
 * Problem :: [10825번 국영수]
 * link :: https://www.acmicpc.net/problem/10825
 * Date :: 2017/03/18
 *
 * http://www.crocus.co.kr
*/
 
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
 
using namespace std;
 
typedef struct _INFO_
{
    char name[11];
    int kor;
    int eng;
    int math;
}INFO;
 
INFO info[100001];
 
bool comp(const INFO &a, const INFO &b)
{
    if(a.kor != b.kor)
        return a.kor > b.kor;
    
    else if(a.kor == b.kor && a.eng == b.eng && a.math == b.math)
    {
        if(strcmp(a.name, b.name) < 0)
            return true;
        return false;
    }
    
    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;
}
 
int main()
{
    int n;
    scanf("%d"&n);
 
    for(int i = 0 ; i < n ; i ++)
        scanf("%s %d %d %d", info[i].name, &info[i].kor, &info[i].eng, &info[i].math);
 
    sort(info, info + n, comp);
 
    for(int i = 0 ; i < n ; i ++)
        printf("%s\n",info[i].name);
    
    return 0;
}
//                                                       This source code Copyright belongs to Crocus
//                                                        If you want to see more? click here >>
Crocus

반응형

'Applied > 알고리즘 문제풀이' 카테고리의 다른 글

[10942번] 팰린드롬?  (0) 2017.03.19
[1325번] 효율적인 해킹  (0) 2017.03.19
[1365번] 꼬인 전깃줄  (0) 2017.03.17
[3176번] 도로 네트워크  (0) 2017.03.17
[11054번] 가장 긴 바이토닉 부분 수열  (0) 2017.03.17