Problem Solving

[백준/Java] 4344번 - 평균 이상 비율 구하기

Jintiago 2022. 3. 27. 23:23

또 뻘짓 했다. BufferedReader/Writer를 반복문이 끝나기 전에 끝내 버리는 위치에 넣어두고는, IO런타임에러가 계속 뜨길래 왜 그러나 한참 찾아봤다.

 

문제는 이렇다.

 

풀이는 간단하다.

 

반복문을 돌며 각 줄마다

1. 점수 평균을 구한 다음,

2. 평균이 넘는 점수의 수를 세서 이를 학생의 수로 나눈 결과를 출력하면 된다.

 

나누기 혹은 나누기 한 결과와 비교 연산 시 double로 형변환 하는 것을 잊지 말아야 한다.

import java.io.*;
import java.util.StringTokenizer;

public class Main{
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        StringTokenizer st;
        
        int cases = Integer.parseInt(br.readLine()); // 테스트 케이스의 수
        
        for (int i=0;i<cases;i++) {
            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++) {
                scores[j] = Integer.parseInt(st.nextToken()); // 배열에 점수 삽입
                sum += scores[j]; // 평균 구하기 위한 점수 합계
            }
            int over_avg = 0; // 평균 넘는 학생 수 세기 위한 변수
            for (int j=0;j<N;j++) {
                if ((double)scores[j] > ((double)sum/N))
                    over_avg++;
            }
            double rate = ((double)over_avg/N)*100;
            bw.write(String.format("%.3f%%\n",rate)); // 소수점 셋째 자리까지 출력
        }
        br.close();
        bw.close();
    }
}