궤도

[EPPER] 11회 7번 본문

💻 현생/⛓ 알고리즘

[EPPER] 11회 7번

영이오 2020. 10. 9. 16:21

문제

 


풀이

 

전혀 어렵지 않은 문제지만, 문제를 잘못 읽는 바람에 뻘짓을 좀 심하게 했다. 실제 시험이었다면 큰일이었을 것이다.

입력 예를 보면 첫 줄에 입력되는 것은 앞으로 입력될 숫자의 개수이다. 난 저것마저 평균계산에 포함해야 하는 것이라고 착각해서 고생했다. 손으로 몇번씩 계산해봐도 답이 나오지 않았는데, 당연할 뿐이다.

 

먼저 입력된 숫자 배열을 오름차순으로 정렬한다. 그리고 가장 작은 수부터 묶어서 연쇄적으로 평균을 구해주면 된다. 배열에 숫자가 1개만 있을 수도 있는 경우를 고려해주자.


소스코드

 

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

void insertion_sort(int arr[], int length) { //오름차순 삽입정렬
	for (int i = 1; i < length; i++) {
		int temp = arr[i];
		int j = i - 1;
		while (j >= 0 && arr[j] > temp) {
			arr[j + 1] = arr[j];
			j--;
		}
		arr[j + 1] = temp;
	}
}

double avg(int arr[], int length) {
	if (length == 1) //1개만 있을 수도 있으니까
		return arr[0];
	double avg = (arr[0] + arr[1]) / 2.0; //처음 2개 뽑은 평균
	for (int i = 2; i < length; i++)
		avg = (avg + arr[i]) / 2.0;
	return avg;
}

int main() { //문제를 제대로 읽자
	int n;
	int num_arr[20];

	scanf("%d", &n);
	for (int i = 0; i < n; i++)
		scanf("%d", &num_arr[i]);
	insertion_sort(num_arr, n);
	printf("%.6f", avg(num_arr, n));
}
Comments