티스토리 뷰

728x90
 

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);
		}
	}
}
728x90
250x250
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2025/02   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28
글 보관함