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

개발자가 되고 싶어요 ㅣ 2023. 2. 6. 03:19

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

 

4344번: 평균은 넘겠지

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

www.acmicpc.net

 


 


 

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
import java.util.*;
 
public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
 
        for (int i = 0; i < n; i++) {
            int m = sc.nextInt();
            ArrayList<Integer> numList = new ArrayList();
 
            for (int j = 0; j < m; j++) {
                numList.add(sc.nextInt());
            }
 
            int sum = 0;
            for (int num : numList) {
                sum += num;
            }
 
            double average = sum / m;
 
            int cnt = 0;
 
            for (int num: numList) {
                if (num > average) {
                    cnt += 1;
                }
            }
 
            double result = (double)cnt*100/m;
            System.out.println(String.format("%.3f",result)+"%");
        }
    }
}
cs

 

 

처음에 아래와 같이 코드를 짰다가 엄청 헤맸다...

1
double result = cnt*100/m;
cs

 

자바에서 정수 / 정수는 정수로만 반환된다는 사실을 알게 됐다. 나는 소수 부분까지 필요하기 때문에 result를 double로 선언해줬다. 그러면 자연스래 식의 결과값이 double로 반환될 줄 알았다. 그럼에도 결과는 계속 정수까지만 반환되었다. 한참 헤매다 식 앞에도 타입 선언을 해줘야 변환된다는 사실을 깨달았다.

 

추가로 자바에서 반올림은 String.format으로 표현할 수 있다.

 

자바는 참 배울게 많은 어려운 언어인 것 같다.

 

 

'코테' 카테고리의 다른 글

[백준 / Java] 1065번 : 한수  (0) 2023.02.08
[백준 / Java] 4673번 : 셀프 넘버  (0) 2023.02.07
[백준 / Java] 8958번 : OX퀴즈  (0) 2023.02.06
[백준 / Java] 10818번 : 최소, 최대  (0) 2023.02.05
[백준 / Python] 2108번 : 통계학  (1) 2023.02.03