Computer Science (CS)/알고리즘

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

eune7 2023. 5. 11. 13:05
728x90
반응형

 

 

 

 

 

 

문제

 

 

 

 

정답 풀이

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));
        StringTokenizer st;

        int C = Integer.parseInt(br.readLine());
        int[] arr;

        for(int i = 0; i < C; i++){
            st = new StringTokenizer(br.readLine(), " ");

            int N = Integer.parseInt(st.nextToken());
            arr = new int[N];
            double avg = 0;

            for(int j = 0; j < N; j++){
                arr[j] = Integer.parseInt(st.nextToken());
                avg += arr[j];
            }

            avg/=N;
            double count = 0;

            for(int j = 0; j < N; j++){
                if(arr[j] > avg){
                    count++;
                }
            }
            System.out.printf("%.3f%%\n", (count/N)*100);
        }

        br.close();
    }
}
  • 메모리 15500KB
  • 시간 176ms

어려운 문제는 아니였던 거 같습니다만

소수점 세째자리까지 출력을 해야하니 자료형 유의해줘야하고

처음 알게 된 부분은 소수점까지 출력할 때 printf를 사용했다는 점이였습니다.

 

System.out.printf() 

ex) System.out.printf("%.3f", result);

result를 소수점 세 째자리까지 float형으로 출력

 

그럼 실수로 값을 받을 double형말고 float형도 되지 않느냐 라고 생각하실 수 있는데

double보다는 float가 소수점 오차를 비교적 적다고 합니다.

하지만 소수점 오차가 제일 적으면서 실수 표현이 가능한 것은 BigDecimal이 있습니다.

주로 금융권에서 쓰인다고 합니다만,,

알고리즘 푸는데에 double이나 flaot나 제 생각에는 크게 상관없을 거 같습니다! :)

 

 

 

 

 

728x90
반응형