본문 바로가기

백준

2822)점수 계산

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


쉬운 문제여서 예전에 배웠던 퀵 정렬을 사용해서 풀었다.


정렬한 뒤 상위 5개의 점수합을 구하고


상위 5개 문제의 인덱스를 순서대로 출력해야 한다.


퀵 정렬을 살짝 변형했다.


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
#include<stdio.h>
#define NUM 8
 
void swap(int *A, int *B) {
    int temp;
    temp = *A;
    *= *B;
    *= temp;
}
 
int partition(int A[],int B[],int p ,int r) {
    int i = p-1;
 
    for (int j = p; j < r;j++) {
        if (A[j] < A[r]) {
            swap(&A[++i], &A[j]);
            if (B!=NULL)swap(&B[i], &B[j]);
            
            
        }
    }
    swap(&A[i+1], &A[r]);
    if (B != NULL) swap(&B[i+1], &B[r]);
 
    return i + 1;
}
 
void quickSort(int A[],int B[],int p, int r) {
    int q;
 
    if (p<r) {
        q = partition(A,B,p,r);
        quickSort(A,B,p,q-1);
        quickSort(A,B,q+1,r);
    }
}
 
int main() {
    int score[NUM];
    int index[NUM] = {1,2,3,4,5,6,7,8};
    int sum = 0;
 
    for (int i = 0; i < NUM;i++) {
        scanf("%d",&score[i]);
    }
 
    quickSort(score,index,0,7);
    quickSort(index, NULL37);
 
    for (int i = 3; i < NUM; i++) {
        sum += score[i];
    }
 
    printf("%d\n",sum);
    for(int i = 3; i < NUM; i++){
        printf("%d ", index[i]);
    }
    printf("\n");
 
    return 0;
}
cs


'백준' 카테고리의 다른 글

3460)이진수  (0) 2019.02.01
2799)블라인드  (0) 2019.01.31
5397)키로거  (0) 2019.01.31
2846)오르막길  (0) 2019.01.30
1929)소수 구하기  (0) 2019.01.24