백준

백준 - 4344번(평균은 넘겠지)

챈박 2021. 3. 25. 00:13

문제 내용은 아래와 같다.

 

문제를 읽고 어렵지 않게 코딩할 수 있을 거라 생각했는데 정답비율을 보고 놀랬다.

테스트 케이스도 있고 for문을 여러차례 사용해야 할 것이라는 예감은 들었지만 일단 해보았다.

 

import java.util.Scanner;
public class Main {

   public static void main(String[] args) {
      Scanner sc = new Scanner(System.in);
      int tc = sc.nextInt(); // 테스트 케이스 수
         
      for(int t=0; t<tc; t++) {
         int n = sc.nextInt(); // 학생 수
         int[] score = new int[n];
         for(int i=0; i<score.length; i++) {
            score[i] = sc.nextInt(); //학생들 점수 입력
         }
         
         int sum = 0;
         for(int i=0; i<score.length; i++) {
            sum+=score[i]; //점수 합계
         }
         double average = sum/n; //평균
         
         double count = 0;
         for(int i=0; i<score.length; i++) {
            if(score[i]>average) {
               count++;  //평균보다 높은 학생 수 
            }
         }
         double result = (count/n)*100;
         System.out.println(String.format("%.3f", result)+"%"); // String format() 메소드 활용
      }
   }
}

이것이 나의 코딩이다.

순조롭게 진행되었지만 마지막 문장에서 막혔다. 생각해보니 나는 반올림하는 메소드나 방법을 모르고 있었다. 그래서 찾아보니 Math.round()와 내가 사용한 String.format()이 가능했다. 하지만 Math.round()는 소숫점 아래에서 0의 반복을 제거하기 때문에 "%.3" (소숫점 셋째자리까지 반올림) 로 해준다고 해도 40.000000... 같은경우 40.000이 아닌 40.0 으로 반환하여 이 문제가 원하는 답이랑 거리가 멀다 (실제로 사용했다가 오답처리되었다..) 그래서 format() 메소드를 사용하여 원하는 답을 얻을 수 있었다.

 

반응형