성우리뷰

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시간날렸다 개멍충이