티스토리 뷰
4344번: 평균은 넘겠지
대학생 새내기들의 90%는 자신이 반에서 평균은 넘는다고 생각한다. 당신은 그들에게 슬픈 진실을 알려줘야 한다.
www.acmicpc.net
문제
대학생 새내기들의 90%는 자신이 반에서 평균은 넘는다고 생각한다. 당신은 그들에게 슬픈 진실을 알려줘야 한다.
입력
첫째 줄에는 테스트 케이스의 개수 C가 주어진다.
둘째 줄부터 각 테스트 케이스마다 학생의 수 N(1 ≤ N ≤ 1000, N은 정수)이 첫 수로 주어지고, 이어서 N명의 점수가 주어진다. 점수는 0보다 크거나 같고, 100보다 작거나 같은 정수이다.
출력
각 케이스마다 한 줄씩 평균을 넘는 학생들의 비율을 반올림하여 소수점 셋째 자리까지 출력한다.
엄청 쉽고 간단한 문제인데도 여러번 시도 끝에 겨우 맞았다. 소수점 셋째짜리까지 반올림을 하라고 해서 무조건 Math.round() 함수를 쓸 생각만 했는데, System.out.printf()에서도 저절로 반올림이 되는지 몰랐다.. 처음엔 Math.round((double)count/N*1000)/1000.0 이렇게 출력을 했었는데, 40.000%으로 출력되어야 할 값이 40.0%로 출력되었다. 그래서 String.format() 함수를 사용했더니 57.143%이 아니라 57.143000%으로 출력되어야 해서 이것도 실패. 열심히 구글링 하다보니 System.out.printf()로도 반올림이 된다는 사실을 깨달아서 이렇게 제출했다. 이렇게 쉬운 문제를 오랫동안 붙잡고 있다니 자존심이 상하는군..
package baekjoon;
import java.util.StringTokenizer;
import java.io.IOException;
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class B_4344_1 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int C = Integer.parseInt(br.readLine()); // 케이스의 개수
StringTokenizer st;
int[] grade;
for(int i=0;i<C;i++) {
st = new StringTokenizer(br.readLine());
int N = Integer.parseInt(st.nextToken()); // 케이스 별 학생의 수
int sum = 0;
grade = new int[N];
for(int j=0;j<N;j++) {
grade[j] = Integer.parseInt(st.nextToken());
sum += grade[j];
}
double avg = (double)sum / N;
int count = 0; // 평균보다 성적이 높은 학생 수 카운트
for(int j=0;j<N;j++)
if(grade[j] > avg)
count++;
System.out.printf("%.3f%%\n", ((double)count/N)*100);
}
}
}
'algorithm > BOJ' 카테고리의 다른 글
[백준 알고리즘/BOJ] 자바(java) 2839번 설탕 배달 (0) | 2021.08.06 |
---|---|
[백준 알고리즘/BOJ] 자바(java) 1924번 2007년 (0) | 2021.08.06 |
[백준 알고리즘/BOJ] 자바(java) 1978번 소수 찾기 (0) | 2021.08.05 |
[백준 알고리즘/BOJ] 자바(java) 11652번 카드 (0) | 2021.08.04 |
[백준 알고리즘/BOJ] 자바(java) 1463번 1로 만들기 (0) | 2021.08.04 |