해결방법
우선 절사평균을 구하기 위해 입력받은 데이터들을 정렬을 해줘야 한다. 여기서는 상하 15퍼를 버리고 남은값들의 평균을 낸다고 했으니 n * 0.15 + 0.5 이런 식으로 15퍼센트를 구하고 0.5를 더해 반올림을 해준다.
그다음 start와 end 변수를 만들어서 절사한 후의 범위를 만들어주고, accumulate와 distance를 이용해 절사평균을 구해준다.
정답 코드
#include <iostream>
#include <vector>
#include <algorithm>
#include <numeric>
#include <cmath>
using namespace std;
int Tmean(vector<int>& data)
{
if (data.empty())
{
return 0;
}
sort(data.begin(), data.end());
int n = data.size();
int Tcount = static_cast<int>(n * 0.15 + 0.5);
auto start = data.begin() + Tcount;
auto end = data.end() - Tcount;
double sum = accumulate(start, end, 0.0);
double mean = sum / distance(start, end);
return static_cast<int>(round(mean));
}
int main()
{
int n;
cin >> n;
vector<int> data(n);
for (int i = 0; i < n; ++i)
{
cin >> data[i];
}
int tmean = Tmean(data);
cout << tmean << endl;
return 0;
}
'코딩테스트' 카테고리의 다른 글
BOJ - 요세푸스 문제 0 11866 (0) | 2025.01.04 |
---|---|
BOJ - 팩토리얼 0의 개수 1676 (0) | 2025.01.04 |
BOJ 숫자의 개수 2 21567 (0) | 2024.12.30 |
BOJ - 이항 계수 1 11050 (0) | 2024.12.17 |
BOJ - FizzBuzz 28702 (0) | 2024.12.15 |