Problem Solving/BOJ

[백준 4344번/1차원 배열] 평균은 넘겠지 - Java

Ethan(기린) 2021. 3. 15. 17:12

www.acmicpc.net/problem/4344

 

4344번: 평균은 넘겠지

대학생 새내기들의 90%는 자신이 반에서 평균은 넘는다고 생각한다. 당신은 그들에게 슬픈 진실을 알려줘야 한다.

www.acmicpc.net


내 코드

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자리로 정해준다. 


생각해야할 점

  1. 출력 값은 소수점 셋째자리까지 출력해야 한다. ( 뒤에 '%'특수문자까지 출력되어야 함 )
  2. 각 테스트 케이스의 첫 번째 입력 값은 해당 케이스의 입력 개수라는 점