내 코드
import java.util.Scanner;
class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int[] arr;
// 테스트케이스 수 입력
int testCase = sc.nextInt();
for(int i = 0; i<testCase; i++) {
int m = sc.nextInt();
arr = new int[m];
double sum = 0;
//성적 입력
for(int j = 0; j < m; j++) {
int tmp = sc.nextInt();
arr[j] = tmp;
sum += tmp;
}
double avg = (sum / m);
double count = 0;
// 평균을 넘는 학생 비율 찾기
for (int j = 0; j < m; j++) {
if(arr[j] > avg ) {
count++;
}
}
System.out.printf("%.3f%%%n",(count/m)*100);
}
sc.close();
}
}
케이스 마다 학생의 수와 학생 별 점수가 입력되고 그 케이스 마다 평균을 초과하는 학생이 얼마나 되는지 비율로 소수점 셋째짜리까지 출력해야 하는 문제다. 출력 결과는 소수점이 그대로 나올 수 있도록 해당 연산을 수행하는 변수를 double 타입의 자료형으로 선언한다. 위 코드의 경우 count나 m 중에 하나가 double 타입이면 한 쪽의 int 타입이 자동형변환(double>int)을 이루어 double 타입의 결과를 출력할 수 있다.
테스트 케이스 만큼 반복문을 통해 학생 수, 성적을 배열에 저장하고 그 성적을 모두 합한 결과까지 구한다. 그 다음 평균이 넘는 학생을 구하기 위해서 (평균을 넘는 학생 / 총 학생 수) * 100 을 해준 후에 printf() 함수로 출력 포멧을 소수점 3자리로 정해준다.
생각해야할 점
- 출력 값은 소수점 셋째자리까지 출력해야 한다. ( 뒤에 '%'특수문자까지 출력되어야 함 )
- 각 테스트 케이스의 첫 번째 입력 값은 해당 케이스의 입력 개수라는 점
'Problem Solving > BOJ' 카테고리의 다른 글
[백준 1065/함수]한수 - JavaScript (0) | 2021.10.10 |
---|---|
[백준 11720번/문자열] 숫자의 합 - Java (0) | 2021.03.16 |
[백준 8958번/1차원 배열] OX퀴즈 - Java (0) | 2021.03.15 |
[백준 1546번/1차원 배열] 평균 - Java (0) | 2021.03.15 |
[백준 3052번/1차원 배열] 나머지 - Java (0) | 2021.03.15 |