성우리뷰
18110) 문제 난이도 매기기
두원공대88학번뚜뚜
2020. 7. 18. 00:06
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
# define SWAP(x, y, temp) ( (temp)=(x), (x)=(y), (y)=(temp) )
int partition(int *arr, int left, int right, int number) {
int pivot, temp;
int low, high;
low = left;
high = right+1;
pivot = arr[left];
do {
do {
low++;
} while (low <= right && arr[low] < pivot);
do {
high--;
} while (high >= left && arr[high] > pivot);
if (low < high) {
SWAP(arr[low], arr[high], temp);
}
} while (low < high);
SWAP(arr[left], arr[high], temp);
return high;
}
// 퀵 정렬
void sort(int *arr, int left, int right, int number) {
if (left < right) {
int p = partition(arr, left, right, number);
sort(arr, left, p - 1, number);
sort(arr, p + 1, right, number);
}
}
int main() {
int number;
scanf("%d", &number);
if (number == 0) {
printf("%d", 0);
return 0;
}
double shangxian = round((double)number*15/ (double)100);
int score;
int * arr;
arr = (int*)malloc(sizeof(int*) * number);
for (int i = 0; i < number; i++) {
scanf("%d", &score);
arr[i] = score;
}
int left = 0, right = number - 1;
sort(arr, left, right, number);
double pingjun = 0;
// printf("상한 %d\n", (int)shangxian);
for (int p = (int)shangxian; p < number - (int)shangxian; p++) {
pingjun += arr[p];
// printf("%d ", arr[p]);
}
// printf("\n");
number = number - 2 * (int)shangxian;
pingjun = round((double)pingjun / (double)number);
printf("%d", (int)pingjun);
free(arr);
return 0;
}
/////////////////////////////
partition과 sort부분은 퀵정렬을 이용.
while문으로 쓰려다 도저히 못해먹겠어서 do while문으로 처리.
뚜뚜야 공부해
0점 입력시 0으로 처리한다는 조건문 못보고 왜틀렸지 하면서 1시간날렸다 개멍충이