포스트

[백준][18110] solved.ac

요구사항 분석

절사평균으로 제거된 숫자들 외의 숫자들의 평균값을 출력하는 문제입니다.
이때 절사평균, 숫자 평균 등 여러 실수들이 사용되는데 여기서는 모두 반올림을 사용하도록 합니다.


알고리즘 선택

절사평균은 정렬된 표본의 앞, 뒤를 제거하는 연산이므로
컨테이너 중 head와 tail에서 모두 연산이 가능한 list를 사용하였습니다.
그리고 절사평균만큼 list의 양쪽에서 원소를 제거하고 평균을 구하였습니다.


풀이 분석

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
#include <iostream>
#include <list>
#include <cmath>

int main() {
	int n;
	std::cin >> n;
	if (n == 0) {
		printf("0\n");
		return 0;
	}

	std::list<int> list;
	for (int i = 0, temp; i < n; ++i) {
		std::cin >> temp;
		list.push_back(temp);
	}
	list.sort();

	int expt_cnt = (int)std::round((float)n * 0.3f * 0.5f);
	for (int i = 0; i < expt_cnt; ++i) {
		if (false == list.empty()) list.pop_front();
		if (false == list.empty()) list.pop_back();
	}
	float sum = 0;
	for (int n : list)
		sum += n;
	printf("%d", (int)(std::round(sum / list.size())));
	return 0;
}   
   


이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.