ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [백준/Java] 4344번 - 평균 이상 비율 구하기
    Problem Solving 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();
        }
    }

     

Designed by Tistory.