[백준/BOJ] 4344번_평균은 넘겠지 (C++/Java)

JIMIN·2023년 2월 3일

BOJ_Bronze

목록 보기
58/75

https://www.acmicpc.net/problem/4344

문제


대학생 새내기들의 90%는 자신이 반에서 평균은 넘는다고 생각한다. 당신은 그들에게 슬픈 진실을 알려줘야 한다.


입력


첫째 줄에는 테스트 케이스의 개수 C가 주어진다.

둘째 줄부터 각 테스트 케이스마다 학생의 수 N(1 ≤ N ≤ 1000, N은 정수)이 첫 수로 주어지고, 이어서 N명의 점수가 주어진다. 점수는 0보다 크거나 같고, 100보다 작거나 같은 정수이다.


출력


각 케이스마다 한 줄씩 평균을 넘는 학생들의 비율을 반올림하여 소수점 셋째 자리까지 출력한다.



💻 예제 입력

5
5 50 50 70 80 100
7 100 95 90 80 70 60 50
3 70 90 80
3 70 90 81
9 100 99 98 97 96 95 94 93 91

💻 예제 출력

40.000%
57.143%
33.333%
66.667%
55.556%

풀이


테스트 케이스의 개수 C를 입력 받은 뒤 이를 기준으로 while 루프를 돌면서 N을 입력받음.

입력받은 N으로 점수를 담을 배열 score를 동적 할당하고, 평균을 넘는 학생들을 카운트 할 pass, 평균 점수를 담을 avg 변수 사용함.

점수를 입력받아 평균을 구한 후, 평균 점수를 넘는 학생들을 카운트 하고 이 비율을 구해서 출력하면 됨.


C++ 소스코드


#include <iostream>
using namespace std;

int main(void)
{
    cout << fixed;
    cout.precision(3);  // 소수점 이하 3자리
    
    int C, N;
    cin >> C;
    
    while (C--)
    {
        cin >> N;
        int* score = new int[N];
        
        // pass: 평균을 넘는 학생들 / avg: 평균
        double pass = 0, avg = 0;
        
        // 입력 받고 누적합
        for (int i = 0; i < N; i++) {
            cin >> score[i];
            avg += score[i];
        }
        avg /= N;   // 평균 구하기
        
        // 평균보다 높은 점수 찾기
        for (int j = 0; j < N; j++)
            if (score[j] > avg) pass++;
        
        // 비율 구해서 출력
        cout << pass / N * 100 << "%\n";
        delete[] score;
    }
}

Java 소스코드


import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int C = Integer.parseInt(br.readLine());

        int N;
        String[] s;
        while (C-- != 0)
        {
            s = br.readLine().split(" ");
            N = Integer.parseInt(s[0]);

            int[] score = new int[N];

            // pass: 평균을 넘는 학생들 / avg: 평균
            double pass = 0, avg = 0;

            // 입력 받고 누적합
            for (int i = 1; i <= N; i++) {
                score[i-1] = Integer.parseInt(s[i]);
                avg += score[i-1];
            }
            avg /= N;   // 평균 구하기

            // 평균보다 높은 점수 찾기
            for (int j = 0; j < N; j++)
                if (score[j] > avg) pass++;

            // 비율 구해서 출력
            System.out.printf("%.3f%%\n", pass / N * 100);
        }
    }
}
profile
잘못된 코드나 정보가 있다면 알려주세요! 👋🏻

0개의 댓글