Scanner sc = new Scanner(System.in); int a = sc.nextInt(); int[] arr; double[] arr2 = new double[a]; double[] arr3 = new double[a]; double[] arr4 = new double[a]; int count = 0;
테스트 케이스의 개수를 입력받을 a, 점수를 입력 받을 배열 arr, 점수의 합계를 입력받을 arr2, 점수의 평균을 입력받을 arr3, 평균보다 점수가 높은 학생의 비율을 입력받을 arr4, 평균보다 점수가 높은 학생의 수를 셀 변수 count를 선언해 주었다.
for (int i = 0; i < a; i++) { int b = sc.nextInt(); arr = new int[b]; for (int j = 0; j < b; j++) { int c = sc.nextInt(); arr[j] = c; arr2[i] += (double) arr[j]; arr3[i] = (double) (arr2[i] / b); }
배열의 개수(입력 받을 점수의 수)를 정할 b의 값을 입력받고, 점수를 c에 저장한다.
arr[] 에 점수를 전부 저장해주고, arr2[]에 점수의 합계를 저장한뒤, arr3[]에 평균을 저장한다.
for(int k=0; k<arr.length; k++) { if(arr[k] > arr3[i]) { count++; } double per = (double)100/b*count; arr4[i] = per; } count = 0; }
arr[]에 있는 점수를 전부 꺼내서, 평균 보다 큰지 검사하고, 몇개의 점수가 평균보다 큰지 count를 증가 시켜서 세준다.
arr4에 최종적인 비율을 저장해주고, count를 0으로 초기화 해준다.
for(int i=0; i<arr4.length; i++) { System.out.printf("%.3f%%\n",arr4[i]); }
소수 3번째 자리까지 반올림하여 출력하라고 하였으므로, printf()를 이용하여 형식 출력을 해준다.
처음에 DecimalFormat 클래스의 format() 메서드를 사용했지만 오답처리가 되서 printf() 로 출력해 주었다.
.3f 는 실수를 소수 3번째 자리까지 반올림하여 출력하라는 뜻이고, %를 하나만 붙이면 %가 출력되지 않으므로, %를 두개 붙여서 출력되게 하였다.
import java.util.Scanner; public class Main9 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int a = sc.nextInt(); int[] arr; double[] arr2 = new double[a]; double[] arr3 = new double[a]; double[] arr4 = new double[a]; int count = 0; for (int i = 0; i < a; i++) { int b = sc.nextInt(); arr = new int[b]; for (int j = 0; j < b; j++) { int c = sc.nextInt(); arr[j] = c; arr2[i] += (double) arr[j]; arr3[i] = (double) (arr2[i] / b); } for(int k=0; k<arr.length; k++) { if(arr[k] > arr3[i]) { count++; } double per = (double)100/b*count; arr4[i] = per; } count = 0; } for(int i=0; i<arr4.length; i++) { System.out.printf("%.3f%%\n",arr4[i]); } } }