문제

문제 링크

어떻게 접근할 것인가?

  • 이 문제는 sorting을 하고 upper_bound를 이용해서 평균 전까지 마지막 값을 찾고 전체 갯수에서 나눠준다.

코드

#include <cstdio>
#include <vector>
#include <algorithm>

using namespace std;

int main(){
    int n, m, input;
    scanf("%d", &n);
    while(n--){
        int sum = 0; float aver;
        scanf("%d", &m);
        vector<int> v(m);
        for(int i = 0; i < m; i++){
            scanf("%d", &v[i]);
            sum += v[i];
        }
        sort(v.begin(), v.end());
        aver = (float)sum / (float)m;
        int up = upper_bound(v.begin(), v.end(), aver) - v.begin();
        printf("%.3f%%\n", 100 - (float)(up)*100/(float)m);
    }
}

느낀점

  • upper bound를 수월하게 쓸 수 있음에 만족한다 ㅎㅎ