백준
백준 - 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() 메소드를 사용하여 원하는 답을 얻을 수 있었다.
반응형