Algorithm/Baekjoon(Java)

[백준/JAVA] 4344 : 평균은 넘겠지

비망노트 2022. 7. 19. 21:39
문제

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

입력

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

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

 

출력

각 케이스마다 한 줄씩 평균을 넘는 학생들의 비율을 반올림하여 소수점 셋째 자리까지 출력한다.

 

예제 입력 예제 출력
5
5 50 50 70 80 100
7 100 95 90 80 70 60 50
3 70 90 80
3 70 90 81
9 100 99 98 97 96 95 94 93 91
40.000%
57.143%
33.333%
66.667%
55.556%

⭕ 평균

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

public class Main{
    public static void main(String[] args)throws IOException{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        
        int tc = Integer.parseInt(br.readLine());
        StringTokenizer st ;
        int student ;
        double count, sum, avg;
        for(int i=0;i<tc;i++){
            count=0;
            sum=0.0;
            avg=0.0;
            st = new StringTokenizer(br.readLine());
            student = Integer.parseInt(st.nextToken());
            int[] scoreArr = new int[student];
            
            int j=0;
            while(st.hasMoreTokens()){
                scoreArr[j] = Integer.parseInt(st.nextToken());
                sum += scoreArr[j];
                j++;
            }
            avg = sum/student;
            
            for(int x=0;x<scoreArr.length;x++){
                if(scoreArr[x]>avg){
                    count++;
                }
            }
            System.out.printf("%.3f%%\n",(count/student)*100);
        }
        br.close();
    }
}

1. 모든 테스트케이스를 돌리는 바깥 fot문

2. 안쪽 while문에서는 scoreArr 배열의 각인덱스를 StringTokenizer로 자른 점수를 넣으며

    평균을 구하기위해 점수의 총합 sum도 구한다.

3. ❗ 이렇게 구한 sum을 학생수 student로  나누어 실수형으로 받는다.

 혹시모를 경우를 위해 처음부터 double형으로 선언해두었다.

4. 안쪽 x for문에서 각 점수를 위에서 구한 평균과 비교해 평균을 넘은 학생수를 count++ 한다.

 

5. System.out.printf 에서 %.3f 로하면 소수점 넷째자리에서 반올림이 아닌 절삭인줄알고

   ( count/student ) * 100000 한뒤 Math.round로 반올림해서 1의자리까지로 맞춘후

    이 값을 다시 /1000 하며 삽질을했다..

6. 그리고 printf 에서 %를 문자열로써 출력하고싶다면 %% 이렇게 두번써주어야한다.

 

StringBuilder 로 받아서해봤는데 자꾸 어디서 틀린건지 못찾겠어서 결국 조금씩 고치면서 printf 로 출력했다.

 

 

 

-출처

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

'Algorithm > Baekjoon(Java)' 카테고리의 다른 글

[백준/JAVA] 4673 : 셀프 넘버  (0) 2022.07.20
[백준/JAVA] 15596 : 정수 N개의 합  (0) 2022.07.20
[백준/JAVA] 2577 : 숫자의 개수  (0) 2022.07.18
[백준/JAVA] 1546 : 평균  (0) 2022.07.17
[백준/JAVA] 3052 : 나머지  (0) 2022.07.16