백준 4344번 평균은 넘겠지 - BufferedReader, StringBuilder, StringToKenizer, String.format

728x90

www.acmicpc.net/problem/4344

 

4344번: 평균은 넘겠지

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

www.acmicpc.net


import java.util.*;
import java.io.*;
class Main {  
  public static void main(String args[]) throws IOException{ 
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    StringBuilder sb = new StringBuilder();
    StringTokenizer st;
    int n = Integer.parseInt(br.readLine());
    String student[] = new String[n];
    for(int i=0; i<n; i++){
      double avg = 0.0;
      int c = 0;
      student[i] = br.readLine();
      st = new StringTokenizer(student[i]);
      int tmp = Integer.parseInt(st.nextToken());
      int tmps[] = new int[tmp];
      int sum = 0;
      for(int j=0; j<tmp; j++){
        tmps[j] = Integer.parseInt(st.nextToken());
        sum = sum + tmps[j];
      }
      avg = sum/tmp;
      for(int j=0; j<tmp; j++){
        if(tmps[j]>avg){
          c++; 
        }
      }
      String result = String.format("%.3f",(double)c/tmp*100);
      sb.append(result+"%\n");
    }  
    br.close();
    System.out.println(sb);
  } 
}

입력 - BufferedReader

출력 - StringBuilder

 

BufferedReader readLine()으로 테스트 케이스 개수를 읽어 n에 넣어줍니다.

 

student[] n개의 배열을 만들고 n번 만큼 반복해줍니다.

 

한줄씩 테스트 케이스를 읽어 배열에 담습니다.

 

그 줄을 Token을 통해 " " 로 잘라줍니다.

 

첫 번째 인자는 학생의 수입니다. 

 

그 수 만큼 반복하며 총 학생의 점수를 구하고 임시 배열을 만들어 학생의 점수를 담습니다.

 

총 학생의 점수와 학생수로 평균을 구하고, 임시 배열에 담긴 학생의 점수와 평균을 비교해서 

 

평균을 넘는 학생이 몇명인지 구합니다. 

 

그 후 총학생의 수와 평균을 넘는 학생의 수로 비율을 구합니다.

 

비율을 String.format으로 소수점 세번째 자리까지 반올림하여 StringBuilder에 담은 뒤에

 

출력해줍니다.

반응형