본문 바로가기

Programming/알고리즘

[백준] 4344 - 평균은 넘겠지 - JAVA[자바]

 

관건은 반올림후, 소수점 셋째자리까지 출력하는 부분이겠다.

 

 

1. 테스트 케이스의 갯수를 가져온다.

int C = Integer.parseInt(br.readLine());

 

2. 한 줄을 불러와서 
총점을 구해서 평균을 구할 준비를 한다.

학생 비율을 소수점 셋째자리까지 구해야하기 때문에 변수중 하나를 double로 설정하면 된다.

for(int i = 0; i<C; i++){
            StringTokenizer st = new StringTokenizer(br.readLine(), " ");
            int N = Integer.parseInt(st.nextToken());
            double sum = 0; //총점을 구하기
            int arr[] = new int[N];
            double over = 0; //평균을 넘는 학생수
            
            for(int j = 0; j < N; j++){
                arr[j] = Integer.parseInt(st.nextToken());
                sum += arr[j];
            }

 

 

3. 평균을 넘는 학생 비율을 구한다. 

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

 

기본 출력문은 println()은 변수의 값을 그대로 출력하므로, 값을 변환하지 않고는 다른 형식으로 출력할 수 없다.
반면에 printf()는 지시자를 통해 변수의 값을 여러 가지 형식으로 변환하여 출력할 수 있다.

 

printf()

System.out.printf("출력 서식",출력할 내용);

  • 출력 후 줄바꿈을 하지 않는다. 줄바꿈을 하려면 지시자 '%n'을 넣어줘야 한다.
  • 출력하려는 값의 수만큼 지시자도 사용해야 한다.
  • 출력될 값과 지시자의 순서는 일치해야 한다.
  • 지시자를 제외한 문자는 입력한 그대로 출력된다.

 

즉, .printf("%.3f%%\n", 는 

1. %.3f 와

2. %%

3. \n로 나누어 보면 되는데,


1 =>  소숫점 3째자리'까지' 반올림해서 보여주고,

2=> '%'라는 문자를

3=> "각 줄이 끝나면 줄바꿈을 해달라"는 것이다.

 

import java.io.IOException;
import java.io.InputStreamReader;
import java.io.BufferedReader;
import java.util.StringTokenizer;

public class Main{
    public static void main(String[] args) throws IOException{
        
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int C = Integer.parseInt(br.readLine());
               
        for(int i = 0; i<C; i++){
            StringTokenizer st = new StringTokenizer(br.readLine(), " ");
            int N = Integer.parseInt(st.nextToken());
            double sum = 0;
            int arr[] = new int[N];
            double over = 0;
            
            for(int j = 0; j < N; j++){
                arr[j] = Integer.parseInt(st.nextToken());
                sum += arr[j];
            }
            for(int k = 0; k < N; k++){
                if (arr[k] > (sum/N)){
                    over++;
                }
            }
            System.out.printf("%.3f%%\n", (over/N)*100);
        }
    }
}