문제
대학생 새내기들의 90%는 자신이 반에서 평균은 넘는다고 생각한다. 당신은 그들에게 슬픈 진실을 알려줘야 한다.
입력
첫째 줄에는 테스트 케이스의 개수 C가 주어진다.
둘째 줄부터 각 테스트 케이스마다 학생의 수 N(1 ≤ N ≤ 1000, N은 정수)이 첫 수로 주어지고, 이어서 N명의 점수가 주어진다. 점수는 0보다 크거나 같고, 100보다 작거나 같은 정수이다.
출력
각 케이스마다 한 줄씩 평균을 넘는 학생들의 비율을 반올림하여 소수점 셋째 자리까지 출력한다.
| 예제 입력 | 예제 출력 |
| 5 5 50 50 70 80 100 7 100 95 90 80 70 60 50 3 70 90 80 3 70 90 81 9 100 99 98 97 96 95 94 93 91 |
40.000% 57.143% 33.333% 66.667% 55.556% |
⭕ 평균
import java.util.*;
import java.io.*;
public class Main{
public static void main(String[] args)throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int tc = Integer.parseInt(br.readLine());
StringTokenizer st ;
int student ;
double count, sum, avg;
for(int i=0;i<tc;i++){
count=0;
sum=0.0;
avg=0.0;
st = new StringTokenizer(br.readLine());
student = Integer.parseInt(st.nextToken());
int[] scoreArr = new int[student];
int j=0;
while(st.hasMoreTokens()){
scoreArr[j] = Integer.parseInt(st.nextToken());
sum += scoreArr[j];
j++;
}
avg = sum/student;
for(int x=0;x<scoreArr.length;x++){
if(scoreArr[x]>avg){
count++;
}
}
System.out.printf("%.3f%%\n",(count/student)*100);
}
br.close();
}
}
✅
1. 모든 테스트케이스를 돌리는 바깥 fot문
2. 안쪽 while문에서는 scoreArr 배열의 각인덱스를 StringTokenizer로 자른 점수를 넣으며
평균을 구하기위해 점수의 총합 sum도 구한다.
3. ❗ 이렇게 구한 sum을 학생수 student로 나누어 실수형으로 받는다.
혹시모를 경우를 위해 처음부터 double형으로 선언해두었다.
4. 안쪽 x for문에서 각 점수를 위에서 구한 평균과 비교해 평균을 넘은 학생수를 count++ 한다.
5. System.out.printf 에서 %.3f 로하면 소수점 넷째자리에서 반올림이 아닌 절삭인줄알고
( count/student ) * 100000 한뒤 Math.round로 반올림해서 1의자리까지로 맞춘후
이 값을 다시 /1000 하며 삽질을했다..
6. 그리고 printf 에서 %를 문자열로써 출력하고싶다면 %% 이렇게 두번써주어야한다.
StringBuilder 로 받아서해봤는데 자꾸 어디서 틀린건지 못찾겠어서 결국 조금씩 고치면서 printf 로 출력했다.
-출처
'Algorithm > Baekjoon(Java)' 카테고리의 다른 글
| [백준/JAVA] 4673 : 셀프 넘버 (0) | 2022.07.20 |
|---|---|
| [백준/JAVA] 15596 : 정수 N개의 합 (0) | 2022.07.20 |
| [백준/JAVA] 2577 : 숫자의 개수 (0) | 2022.07.18 |
| [백준/JAVA] 1546 : 평균 (0) | 2022.07.17 |
| [백준/JAVA] 3052 : 나머지 (0) | 2022.07.16 |