본문 바로가기
백준

[백준] 4344번 : 평균은 넘겠지 – JAVA [자바]

by Hongwoo 2022. 7. 7.
반응형

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

 

4344번: 평균은 넘겠지

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

www.acmicpc.net

 


  • 문제

 

 


  • 문제 풀이

백준 4344번 평균은 넘겠지는 브론즈 1 난이도의 수학 문제이다. 이 문제에서는 C개의 테스트 케이스가 있고 각 테스트 케이스에는 학생 N명의 점수가 주어진다. 그리고 각 테스트 케이스마다 평균을 넘는 학생의 비율을 소수점 셋째 자리로 반올림한 후에 출력하면 되는 문제이다. 

 

이 문제에서는 int형 배열 scores를 선언했다. 이 이유는 각 학생의 점수가 2번씩 필요하기 때문이다. 처음에는 학생들의 시험 성적을 평균을 낼 때 필요하고 그다음에는 각 학생의 점수가 평균 이상인지 확인할 때 필요하다. 그리고 그다음에 double형 변수 sum에 모든 학생들의 점수를 더하고 평균을 낸다. scores 배열에 모든 학생들의 시험 성적이 있기 때문에 총 몇 명이 평균 이상인지를 구할 수 있다. 이것은 count에 저장하고 마지막에 n으로 나눠서 비율을 구할 수 있다.

 

소수점 세 자리로 답을 출력해야 하기 때문에 String.format 함수를 이용해서 풀 수 있다. 다음과 같이 이 함수를 사용하면 소수점 세 자리로 반올림하여 구할 수 있다.

 

String.format("%.3f", number);

 

자세한 코드는 밑에서 참고할 수 있다.

 


  • 코드

 

import java.io.*;
import java.util.*;
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());  //테스트 케이스 개수
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < c; i++) {
            StringTokenizer st = new StringTokenizer(br.readLine());
            int n = Integer.parseInt(st.nextToken());
            int[] scores = new int[n];
            double sum = 0;
            for (int j = 0; j < n; j++) {
                scores[j] = Integer.parseInt(st.nextToken());
                sum += scores[j];
            }
            sum /= (double)n; //평균 구하기
            double count = 0;  //평균 이상이 몇 명인지 세기
            for (int j = 0; j < n; j++) {
                if (scores[j] > sum) {
                    count++;
                }
            }
            count /= (double)n;
            count *= 100;  //평균 이상인 확률 구하기
            String s = String.format("%.3f", count);  //세자리수로 반올림 하기
            sb.append(s + "%\n");
        }
        System.out.print(sb);
    }
}

 

 

반응형

댓글