(Java) 백준 4344번 - 평균은 넘겠지

코딩너구리·2026년 1월 22일

코딩 문제 풀이

목록 보기
175/266

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

문제

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

접근

매 테스트 케이스마다 주어진 N명을 크기로 하는 배열을 만들어 점수를 저장하며 이 점수들을 전부 누적해 N을 나눠 동시에 평균까지 구해버린다.
이제 배열을 순환하며 평균보다 낮은 학생의 수를 누적하고 전체 학생 수 로 나눠 비율을 구해낸다.

문제해결

> 테스트 케이스의 수를 C에 입력받아 저장하고 C번 while문으로 각 케이스를 처리한다.
> 학생수 N을 입력받고 이를 크기로 점수 배열 score을 선언한다.
> 실수형 점수의 합과 평균을 담을 변수 sum과 avg를 선언한다.
> 학생 수 만큼 반복하며 배열에 점수를 담으면서 sum에 점수를 누적한다.
> 이 과정이 끝나면 바로 학생 수로 sum을 나눠 평균을 구한다.
> 이제 배열의 원소를 순회하며 평균을 초과하는 점수를 가진 학생의 수를 cnt에 누적한다.
> 출력을 한번에 하기 위해 stringbuilder에 출력형식을 소수점 아래 셋째 자리까지 format하여 저장한다.
> %.3f로 실수형 소수점 아래 세자리, %는 포맷문자이기 때문에 %%로 이스케이프 해주어 %를 출력하고 줄바꿈도 추가해준다. 
> 이 format형식으로 비율이므로 cnt * 100.0을 곱해 실수로 변환해주고 학생 수 N으로 나눠 구해준다.

코드

import java.io.*;
import java.util.*;
import java.lang.*;

public class Main
{
    //4344번 평균은 넘겠지
    static int C, N;
    static int[] score;
    public static void main(String[] args) throws IOException
    {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringBuilder sb = new StringBuilder();
        C = Integer.parseInt(br.readLine());

        while(C-->0)
        {
            StringTokenizer st = new StringTokenizer(br.readLine());
            N = Integer.parseInt(st.nextToken());
            score = new int[N];
            
            double sum = 0, avg;
            for(int i = 0; i < N; i++) sum += score[i] = Integer.parseInt(st.nextToken());
            avg = sum / N;

            int cnt = 0;
            for(int i : score) if(i > avg) cnt++;

            sb.append(String.format("%.3f%%\n", cnt * 100.0 / N));
        }
        System.out.print(sb);
    }
}

후기

형식 지정자의 역할과 기능, 어떻게 쓰는지를 자세히 알아보는 좋은 문제였다.

0개의 댓글