본문 바로가기

백준/실버

[백준 18110번] solved.ac (C++)

문제링크 : https://www.acmicpc.net/problem/18110

 

18110번: solved.ac

5명의 15%는 0.75명으로, 이를 반올림하면 1명이다. 따라서 solved.ac는 가장 높은 난이도 의견과 가장 낮은 난이도 의견을 하나씩 제외하고, {5, 5, 7}에 대한 평균으로 문제 난이도를 결정한다.

www.acmicpc.net

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int, int> pii;
const int MAX = 987654321;

int arr[300003];

int main()
{
    ios_base::sync_with_stdio(0); 
	cin.tie(0);

    int N;
    cin >> N;

    for(int i=0; i<N; i++)
    {
        cin >> arr[i];
    }

    sort(arr, arr+N); //위아래 구별을 위한 정렬
    int idx = 0; 
    idx = round(N*0.15); //위아래 15퍼센트 (반올림)

    float result = 0;
    for(int i=idx; i<N-idx; i++) //위아래 15퍼센트 제외하고 더해주기
    {
        result+=arr[i];
    }

    cout << (N==0 ? 0 : round(result/(N-idx*2))); //0이면 0, 아니면 반올림해서 평균구하기
    return 0;
}

처음에 수를 입력받고, 위아래 구별을 해야하기 때문에 정렬을 시행한다.

그리고 위아래 15퍼센트를 계산하는데 이때 주의해야 할 것이 문제에서 반올림을 하라 한 것이다.

이는 round 함수로 간단하게 처리할 수 있다.

 

이후 result의 값도 이후 평균을 구하는 과정에서 반올림이 필요하므로 처음에 int 자료형이 아닌, double이나 float로 선언해준다.