백준 18110번 문제 바로가기

solved.ac

실제 solved.ac에 있는 문제들의 난이도 반영 알고리즘을 따와서 만든 문제. 절사평균이라는 개념은 처음 들었는데 통계학적으로 outlier들을 제거할 수 있는 유용한 방법인 것 같다. 문제는 주어진 조건대로만 구현하면 쉽게 풀렸는데, 다만 index 범위의 설정과, (n=0)같은 예외처리에 신경써야했던 문제다.

내 풀이

#include <iostream>
#include <vector>
#include <cmath>
#include <algorithm>

using namespace std;

int main()
{
    int n, rate;
    vector<int> rates;
    
    cin >> n; // 난이도 의견의 수
    
    if (n == 0){
        cout << 0;
        return 0;
    }
    
    for (int i=0; i<n; i++){
        cin >> rate;
        rates.push_back(rate);
    }
    
    sort(rates.begin(), rates.end());
    int cut = round(n*0.15);
    
    float average = 0;
    for (int i=cut; i<n-cut; i++){
        average += rates[i];
    }
    
    average /= (n - 2*cut);
    cout << round(average);
    
    return 0;
}