본문 바로가기

알고리즘!

백준 4344번-평균은 넘겠지

문제

대학생 새내기들의 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