문제

대학생 새내기들의 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
블로그 이미지

RIsN

,