문제
대학생 새내기들의 90%는 자신이 반에서 평균은 넘는다고 생각한다. 당신은 그들에게 슬픈 진실을 알려줘야 한다.
입력
첫째 줄에는 테스트 케이스의 개수 C가 주어진다.
둘째 줄부터 각 테스트 케이스마다 학생의 수 N(1 ≤ N ≤ 1000, N은 정수)이 첫 수로 주어지고, 이어서 N명의 점수가 주어진다. 점수는 0보다 크거나 같고, 100보다 작거나 같은 정수이다.
출력
각 케이스마다 한 줄씩 평균을 넘는 학생들의 비율을 반올림하여 소수점 셋째 자리까지 출력한다.
#include<iostream>
#include<vector>
#include<algorithm>
#include<string>
#include<numeric>
using namespace std;
int main() {
int how,how2=0,sum;
float avg = 0, per = 0;
cin >> how;
vector<vector<int>>arr;
arr.assign(how, vector<int>(1, 0));
for (int i = 0; i < how; i++) {
cin >> how2;
arr[i].assign(how2, 0);
for (int j = 0; j < how2; j++) {
cin >> arr[i][j];
}
avg = accumulate(arr[i].begin(), arr[i].end(), 0.000f) / arr[i].size();
sum = 0;
for (auto i : arr[i]) {
if(avg<i)
sum += 1;
}
printf("%.3f%%\n",(float)sum/how2*100);
}
}
입력을 받아 2차원 벡터를 만들어주고 반마다 학생수가 다르므로 assign을 통해 학생수만큼 2차원 벡터를 확장해준다.
accumulate를 통해 요소들의 합을 구하고 size를 통해 나눠줌으로써 평균을 구한다.
그 후 요소별로 평균이랑 비교해 카운트를 하고 %.3f를 통해 소수점 셋째 자리까지 출력을 한다.
C++을 연습하기 좋은 문제였다.
'알고리즘!' 카테고리의 다른 글
백준 1065번-한수 (0) | 2019.07.03 |
---|---|
백준 2941번-크로아티아 알파벳 (0) | 2019.07.02 |
백준 1546번-평균 (0) | 2019.05.27 |
백준 1924번-2007년 (0) | 2019.05.24 |
백준 2839번-설탕배달 (0) | 2019.05.22 |