suheang

[백준] | JAVA, 자바 | 4344번 - 평균은 넘겠지 본문

알고리즘

[백준] | JAVA, 자바 | 4344번 - 평균은 넘겠지

suheang 2024. 4. 2. 12:52

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

 

4344번: 평균은 넘겠지

각 케이스마다 한 줄씩 평균을 넘는 학생들의 비율을 반올림하여 소수점 셋째 자리까지 출력한다. 정답과 출력값의 절대/상대 오차는 10-3이하이면 정답이다.

www.acmicpc.net


문제 요약 :

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

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

각 케이스마다 한 줄씩 평균을 넘는 학생들의 비율을 반올림하여 소수점 셋째 자리까지 출력한다. 정답과 출력값의 절대/상대 오차는 10-3이하이면 정답이다.


문제 풀이 :

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

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());

        for (int i = 0; i < c; i++) {
            StringTokenizer st = new StringTokenizer(br.readLine());
            int n = Integer.parseInt(st.nextToken());
            int[] scores = new int[n];
            int sum = 0;

            for (int j = 0; j < n; j++) {
                int num = Integer.parseInt(st.nextToken());
                scores[j] = num;
                sum += num;
            }

            double avg = (double) sum / n;
            int count = 0;

            for (int j = 0; j < n; j++) {
                if (scores[j] > avg) {
                    count++;
                }
            }

            avg = (double) count / n * 100;

            System.out.println(String.format("%.3f%%", avg));
        }
    }
}

 

1. 테스트 케이스 개수 n입력받기

2. 학생 수 n을 입력받기, 점수를 저장할 배열 scores, 점수의 합을 계산할 변수 sum 생성

3. for문을 사용해 학생 수 n만큼 점수 입력받고 scores에 저장 및 sum에 점수를 합을 계산

4. 계산한 sum을 학생 수만큼 나누어 평균을 구하고 평균이 넘은 학생 수를 구하기 위해 변수 count 생성

5. scores를 불러와 학생의 점수가 평균보다 높다면 count 증가

6. count를 학생 수만큼 나누고 100을 곱해줌

7. String.format을 사용해 소수점 셋째 자리까지 출력