백준 문제풀이/백준 Silver

BOJ 18110 - Solved.ac [C++]

LKBaekjoon 2023. 10. 30. 15:49
반응형

18110번: solved.ac (acmicpc.net)

 

18110번: solved.ac

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

www.acmicpc.net

문제 설명은 다음과 같다.

문제 설명

간단히 이야기하자면, solved.ac가 결정한 문제의 난이도를 계산해서 출력해야 하는데, 그 과정은 다음의 과정을 따른다.

 

1. 아직 아무 의견이 없다면 (제출한 사람이 0) -> 난이도 : 0

2. 의견이 1개 이상 있다면 (n>=1), 난이도는 상위 의견 15%, 하위 의견 15%를 제외하고 나머지 의견들로 난이도를 책정한다.

예제 입력 / 출력

C++에서는 <numeric> header file과, 벡터 자료구조를 사용해서 쉽게 구현이 가능했다.

 

우선 아래는 제출한 C++ 코드이다.

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

using namespace std;
int main() {
    ios::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);

    double test;
    cin >> test;
    vector<int> anslist;
    if (test==0){
        cout << 0 << '\n';
        return 0;
    }
    for (int i=0;i<test;i++){
        int itg;
        cin >> itg;
        anslist.push_back(itg);
    }
    sort(anslist.begin(),anslist.end());
    double mok = round(test*0.15);
    double dap = accumulate(anslist.begin()+mok,anslist.end()-mok, 0) / (test-2*mok);
    cout << round(dap) << endl;

    return 0;
}

우선 벡터 자료구조 안에 입력 받은 값들을 다 때려박는다.

 

이후에 sort 시켜서 오름차순 정렬을 시켜놓은 후에, round 함수를 사용해서

전체 인원의 15%이 몇 명인지 mok 변수에 담는다.

 

그 다음에, 처음과 끝으로부터 mok을 뺀 포인터가 가리키는 변수들을 모조리 더한다.

(accumulate 함수를 사용하면 벡터 안의 원소 값을 다 더해준다)

 

마지막으로 평균을 내기 위해서, 전체 인원 수에서 2*mok 만큼 빼준 것의 평균을 내준다 (위 아래 상위 15%가 빠졌음)

 

반올림을 해주기 위해 round 함수를 써주면 끝 ~!

반응형