Problem Solving
[백준/Java] 4344번 - 평균 이상 비율 구하기
Jintiago
2022. 3. 27. 23:23
또 뻘짓 했다. BufferedReader/Writer를 반복문이 끝나기 전에 끝내 버리는 위치에 넣어두고는, IO런타임에러가 계속 뜨길래 왜 그러나 한참 찾아봤다.
문제는 이렇다.
풀이는 간단하다.
반복문을 돌며 각 줄마다
1. 점수 평균을 구한 다음,
2. 평균이 넘는 점수의 수를 세서 이를 학생의 수로 나눈 결과를 출력하면 된다.
나누기 혹은 나누기 한 결과와 비교 연산 시 double로 형변환 하는 것을 잊지 말아야 한다.
import java.io.*;
import java.util.StringTokenizer;
public class Main{
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringTokenizer st;
int cases = Integer.parseInt(br.readLine()); // 테스트 케이스의 수
for (int i=0;i<cases;i++) {
st = new StringTokenizer(br.readLine()); // 테스트 케이스 읽기
int N = Integer.parseInt(st.nextToken()); // 학생의 수
int[] scores = new int[N]; // 점수 넣을 배열 생성
int sum = 0; // 점수 합계 구하기 위한 변수
for (int j=0;j<N;j++) {
scores[j] = Integer.parseInt(st.nextToken()); // 배열에 점수 삽입
sum += scores[j]; // 평균 구하기 위한 점수 합계
}
int over_avg = 0; // 평균 넘는 학생 수 세기 위한 변수
for (int j=0;j<N;j++) {
if ((double)scores[j] > ((double)sum/N))
over_avg++;
}
double rate = ((double)over_avg/N)*100;
bw.write(String.format("%.3f%%\n",rate)); // 소수점 셋째 자리까지 출력
}
br.close();
bw.close();
}
}