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; *A = *B; *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, NULL, 3, 7); 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 |