옹실이의 개발이야기

알고리즘

[백준] 알고리즘 #4344 : 평균은 넘겠지 (Java)

옹실 2023. 6. 17. 21:41

문제

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

 

입력

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

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

 

출력

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

 

풀이

1. 케이스 회수 입력받는다.
2. 학생수 만큼 점수 입력받아서 합계를 구하고, 배열에 담는다.
3. 평균보다 높은점수 받은 학생 수를 구한다.
4. 평균 넘는 학생의 점수를 소수점 셋째자리까지 반올림 후 출력한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
import java.util.*;
import java.io.*;
 
public class Main {
    public static void main(String[] args) {
        Scanner sncr = new Scanner(System.in);
        
        //케이스할 회수 입력받기
        int num = sncr.nextInt();
        int arr[];
        
        for(int i=0; i<num; i++) { 
            //학생수 입력받기 (숫자 1개씩 잘라서 옴: ex)i=0, stnt_num=5 / i=1, stnt_num=50)
            int stnt_num = sncr.nextInt();
            
            //학생수 만큼 점수 입력받아서 합계 구하기, 배열에 담기
            arr = new int[stnt_num];
            int sum = 0;
            for(int x=0; x<stnt_num; x++) {
                int pnt = sncr.nextInt(); 
                arr[x] = pnt;    
                sum = sum + pnt;
            }
            
            //평균보다 높은점수 받은 학생 수 구하기
            int cnt = 0;
            for(int z=0; z<stnt_num; z++) {
                if (arr[z] > sum/stnt_num ) { 
                    cnt++;
                }
            }
            //평균을 넘는 학생들의 비율 소수점 셋째자리까지 반올림 후 출력
            System.out.println(String.format("%.3f", (cnt/(double)arr.length)*100)+"%"); //소수점 셋째자리까지 출력
        }
        
        sncr.close();
    }
 
}
 
cs

정답률 35.944%인 이 문제.......... 하나 푸는데 무려 4시간이 걸렸다.
처음에 케이스 회수를 Scanner로 입력받고, 케이수 회수만큼 학생수/점수를 입력받을때는 BufferedReader를 사용했더니 NullPoint 에러가 났다. 찾아보니 둘 중에 하나만 써야 한다고 함.  Scanner만 사용하는 방식으로 수정했다.
※참고 : https://www.acmicpc.net/board/view/83739

 

글 읽기 - 자바 StringTokenizer 런타임 에러(null pointer)관련 질문

댓글을 작성하려면 로그인해야 합니다.

www.acmicpc.net

 

※ 참고(Scanner, BufferedReader)
1. Scanner, BufferedReader 차이 : https://st-lab.tistory.com/41

 

JAVA [자바] - 입력 뜯어보기 [Scanner, InputStream, BufferedReader]

이 글을 지금 이 시점에 써야 할까 고민을 많이 했다. 사실 자바를 그냥 다룰 줄만 아는 것에 목표를 둔다면 이 글이 무의미할 수도 있다. 그러나 자바에 대해 조금이라도 관심이 있고 더 배우고

st-lab.tistory.com

 

2. Scanner 사용법
https://limkydev.tistory.com/170

 

[Java] 자바 표준 입출력 (nextInt, nextLine 등) 주의사항

1. 입출력 함수 사용시 주의사항 1 - 타입 별로 입력을 받는 방법 1) int를 입력 받을 때는 nextInt 메서드를 이용한다. public class StandardIO { public static void main(String[] args) throws IOException { //int를 입력 받

limkydev.tistory.com