[백준][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 라이센스를 따릅니다.