본문 바로가기

Coding Test/Problem Number

[Java] 평균은 넘겠지 [4344번]

728x90

https://www.acmicpc.net/problem/4344

  • 예제 입력1
5
5 50 50 70 80 100
7 100 95 90 80 70 60 50
3 70 90 80
3 70 90 81
9 100 99 98 97 96 95 94 93 91

 

  • 예제 출력1
40.000%
57.143%
33.333%
66.667%
55.556%

  • 문제 접근
    • 각 케이스마다의 평균을 구해야 함
    • 학생들의 각 점수가 평균을 초과하는 학생만 카운트
    • 평균을 초과한 학생 / 총 학생 수 ⇒ 소수점 셋째자리 표현
  • 문제 해결
    • 각 케이스마다 배열을 생성하여 ArrayList에 저장
    • 각 케이스의 평균을 배열로 저장
    • 평균과 각 점수를 비교하여 초과하는 학생 수만 카운트
    • 평균 초과 학생 / 배열 길이 * 100 ⇒ 소수점 셋째자리 표현
  • 슈도 코드
T (테스트 케이스 개수 저장)
avgArr[T] (평균 저장 배열)
avgPercent[T] (평균이 넘는 학생 비율 저장 배열)
List<int[]> 선언
for(T회 반복){
	n (학생 수 저장)
	int[n] A 배열 선언
	sum (합계 저장)
	for(n회 반복){
		A[] 저장
		sum 누적
	}
	list.add(A)
	avgArr[i]에 sum/n 평균 저장
}

calcAvgPercent(){
	for(i=0 ~ T회 반복){
		A = list.get(i번째)
		count(평균을 넘는 학생 수 체크)
		for(j=0 ~ A배열 길이){
			if(A[j] > avgArr[i]){
				count 1증가
			}
		}
		avgPercent[i] = 비율 계산 후 소수점3째자리 반올림하여 저장
	}
}
  • 코딩하기
package Problem_Number;

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

/*
    - 각 케이스마다 배열을 생성하여 ArrayList에 저장
    - 각 케이스의 평균을 배열로 저장
    - 평균과 각 점수를 비교하여 초과하는 학생 수만 카운트
    - 평균 초과 학생 / 배열 길이 * 100 ⇒ 소수점 셋째자리 표현
* */
public class No4344 {
    static int T; // 테스트 케이스 개수
    static int[] avgArr; // 테스트 케이스별 평균 저장
    static double[] avgPercent; // 테스트 케이스별 평균 초과 학생 백분율 계산
    static List<int[]> list = new ArrayList<>(); // 테스트 케이스 저장 리스트
    public static void main(String[] args) {
        inputInit(); // 입력 받는 메서드
        calcAvgPercent(); // 평균 넘는 학생 비율 계산 메서드
        for(int i = 0; i < T; i++){
            System.out.println(String.format("%.3f",avgPercent[i]) + "%");
        }
    }
    private static void inputInit(){
        Scanner scan = new Scanner(System.in);
        T = scan.nextInt();
        avgArr = new int[T];
        avgPercent = new double[T];
        for(int i = 0; i < T; i++){
            int N = scan.nextInt();
            int[] A = new int[N];

            int sum = 0;
            for(int j = 0; j < N; j++){
                A[j] = scan.nextInt(); // 학생 점수 배열에 저장
                sum += A[j]; // 합계 저장
            }
            list.add(A); // List에 배열 추가
            avgArr[i] = sum / A.length; // 각 테스트케이스별 평균 저장
        }
        scan.close();
    }
    private static void calcAvgPercent(){
        for(int i = 0; i < T; i++){
            int[] A = list.get(i); // 테스트 케이스별 배열 추출
            int count = 0; // 평균 넘는 학생 카운트
            int avg = avgArr[i]; // 평균 점수 추출
            for (int j : A) {
                if (j > avg) { // 학생 점수가 평균 초과일 경우
                    count++;
                }
            }
            avgPercent[i] = count * 1.0 / A.length * 100; // 백분율로 저장
        }
    }
}
728x90

'Coding Test > Problem Number' 카테고리의 다른 글

[Java] 2차원 배열의 합 [2167번]  (0) 2024.07.18
[Java] 수들의 합5 [2018번]  (0) 2024.07.18
[Java] 수들의 합2 [2003번]  (0) 2024.07.18
[Java] 참외밭 [2477번]  (0) 2024.07.17
[Java] 2007년 [1924번]  (0) 2024.07.17