Java/BackJoon

[Bac|<joon>]백준 : 4344 :평균은 넘겠지

모모토 2021. 4. 21. 17:04

예제를 보는 순간 바로 배열을 사용하자는 생각이 떠올랐지만, 무식하게 2차 배열을 쓸 생각으로 코드를 짜다 보니 예제는 풀었지만 입력값을 줘야 하는 걸 까먹었다. (2차 배열을 이용한 예제 출력은 Daily-Java에 업로드 예정)

 

출력을 보면 우리는 대학생 새내기들이 속한 행에서 평균점수를 넘는 학생의 수치만 출력하면 된다. 배열에 모든 숫자를 넣어 관리하면서 예제를 출력하는 방식이 아니라 그때그때 필요한 행의 점수를 입력해서 원하는 값을 출력 후 초기화하여 배열을 재사용하는 코드를 짜 보도록 하자

 

1) testcase

 

학생들의 평균점수를 넘은 수치를 구하는 건 testcase 만큼 실행한다. 즉 testcase는 총 실행 횟수 첫 번째 for문의 변수

 

2) 학생수 N

 

각 testcase마다의 학생수 N은 배열의 길이이다. 학생수 N도 Scanner로 입력받아야 한다. 그리고 각 학생의 점수를 for문으로 입력시킨다.

 

3) count

 

(2)까지 만들어놓은 배열을 이용하여  각 testcase 학생들의 평균 계산 및 점수가 평균 이상인 학생들의 수를 count 한다.

 

4) 평균 이상의 점수를 받은 학생의 비율 소수점 아래 셋째 자리 반올림 계산

 

여기까지 한 사이클이고 이것을 testcase만큼 반복한다.

 


Answer

import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
		Scanner in = new Scanner(System.in);
		
		int[] arr;
		System.out.println("testcase");
		int testcase = in.nextInt();
		
		for(int i = 0 ; i < testcase ; i++) { //총 반복횟수
			System.out.println("학생수");
			int N = in.nextInt();	// testcase:1 의 학생수 
			arr = new int[N]; // testcase:1에서 쓸 배열의 길이(학생수)를 입력받음
			
			double sum = 0;	// 성적 누적 합 변수 소수점 계산을 해야하니 double
			
			
			for(int j = 0 ; j < N ; j++) { // 학생수만큼 성적을 입력받는다.
				System.out.println("성적입력");
				int val = in.nextInt();	// 성적 입력 
				arr[j] = val; //testcase:1의 학생 성적 입력
				sum += val;	// 성적 누적 합 
			}
			
			double mean = (sum / N) ;
			double count = 0; // 평균 넘는 학생 수 
			
			// 평균 넘는 학생 비율 찾기 
			for(int j = 0 ; j < N ; j++) {
				if(arr[j] > mean) {
					count++;
				}
			}
			
			System.out.printf("%.3f%%\n",(count/N)*100);
			
	
		}
		in.close();
	}