문제
대학생 새내기들의 90%는 자신이 반에서 평균은 넘는다고 생각한다. 당신은 그들에게 슬픈 진실을 알려줘야 한다.
입력
첫째 줄에는 테스트 케이스의 개수 C가 주어진다.
둘째 줄부터 각 테스트 케이스마다 학생의 수 N(1 ≤ N ≤ 1000, N은 정수)이 첫 수로 주어지고, 이어서 N명의 점수가 주어진다. 점수는 0보다 크거나 같고, 100보다 작거나 같은 정수이다.
출력
각 케이스마다 한 줄씩 평균을 넘는 학생들의 비율을 반올림하여 소수점 셋째 자리까지 출력한다.
코드
#include <iostream>
#include <math.h>
using namespace std;
int main(){
// :: 카운트 입력
int count;
cin >> count;
// :: 카운트 반복
string result = "";
for(int index = 0; index < count; index++) {
// :: 내부 카운트 입력
int innerCount;
cin >> innerCount;
// :: 내부 카운트 반복
int students[innerCount]; // : 학생 제작
int sum = 0; // : 합 제작
for(int innerIndex = 0; innerIndex < innerCount; innerIndex++) {
cin >> students[innerIndex];
sum += students[innerIndex];
}
// :: 평균 구하기
float average = (float)sum / (float)innerCount;
// :: 학생들 다시 확인: 평균 이상인 학생들
int eliteStudent = 0;
for(int innerIndex = 0; innerIndex < innerCount; innerIndex++) {
if(students[innerIndex] > average) eliteStudent += 1;
}
// :: 비율 계산
// :: 반올림 처리 : 하면 안됨
// float rateElites = round(((float)eliteStudent / innerCount) * 100000)/ 1000;
float rateElites = (((float)eliteStudent / innerCount) * 100);
// :: precision 처리 안하면 틀리는데 이유를 알 수가 없음...
cout << fixed;
cout.precision(3);
cout << rateElites << "%" << endl;
// :: 소수점 문자열로 자르기
//result += to_string(rateElites).substr(0, 6) + "%\n";
}
// :: 출력
//cout << result;
return 0;
}
참고
'C++ > Baekjoon' 카테고리의 다른 글
백준 4673: 셀프 넘버 (0) | 2022.09.27 |
---|---|
백준 15596: 정수 N개의 합 (0) | 2022.09.27 |
백준 8958: OX퀴즈 (0) | 2022.08.21 |
백준 1546: 평균 (0) | 2022.08.21 |
백준 3052: 나머지 (0) | 2022.08.21 |