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

[입력]
첫째 줄에는 테스트 케이스의 개수 C가 주어진다.
둘째 줄부터 각 테스트 케이스마다 학생의 수 N(1 ≤ N ≤ 1000, N은 정수)이 첫 수로 주어지고, 이어서 N명의 점수가 주어진다.
점수는 0보다 크거나 같고, 100보다 작거나 같은 정수이다.

[출력]
각 케이스마다 한 줄씩 평균을 넘는 학생들의 비율을 반올림하여 소수점 셋째 자리까지 출력한다.

 

해당 문제는 크게 어렵지 않게 풀 수 있는 것 같다.

먼저 메인 메서드에서 스캐너를 활용하여 학생 숫자를 정수로 입력을 받는다. 정수가 1 ~ 1000이라는 조건이 있기에, 1보다 작거나 1000보다 크면 ERROR라는 메세지를 출력 하였다.

 

그렇지 않다면, 입력 받은 숫자 크기의 배열을 int형으로 생성해, 여러 개의 점수를 받을 데이터를 준비하고, for문을 이용해서 배열의 크기, 즉 학생 숫자만큼의 점수를 입력 할 수 있다. 예를 들어 학생이 5명이면, 5명의 점수인 5개의 점수만 입력 가능한 것이다.

 

그리고 메서드average에 배열 arr를 매개 변수로 넘긴다.

public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    int num  = sc.nextInt();
    if(num < 1 || num > 1000){
        System.out.println("ERROR 숫자가 너무 크거나 작습니다.");
    } else{
        int[] arr = new int[num];
        for (int i = 0; i < num; i++) {
            arr[i] = sc.nextInt();
        }
        average(arr);
    }
}

 

메서드 average는 int형 배열인 arr를 인자로 받는다.

우리가 이 문제를 풀기 위해 사용할 데이터는, 총 점수(모든 점수들의 합), 평균 점수와 평균 점수를 넘는 점수를 보유한 학생의 숫자다.

따라서 각각 totalScore(총 점수), averageScore(평균 점수), averageUpStudent(평균 초과 학생 숫자)를 선언 했다.

 

for문을 배열의 길이 만큼 들려 총 점수에 데이터를 할당하고, 총 점수를 배열의 길이(학생 숫자)로 나누어 평균 점수를 할당한다.

그리고 for문을 또 배열의 길이만큼 돌려서, 평균 점수보다 높은 점수를 보유한 학생 숫자를 평균 초과 학생 숫자에 할당한다

 

그리고 float형 데이터인 percent에 전체 학생 대비 평균 초과 학생의 비율을 %로 표현하기 위해, 총 학생 숫자 / 평균 초과 학생을 하고, persent 표기를 위해 100을 곱했다.

 

마지막으로 printf를 이용해 3자리까지 소수점을 표현해 출력 했다.

public static void average(int[] arr){
    int totalScore = 0, averageScore = 0;
    float averageUpStudent = 0;
    for (int i = 0; i <arr.length; i++) {
        totalScore += arr[i];
    }
    averageScore = totalScore/arr.length;
    for (int i = 0; i <arr.length; i++) {
        if(arr[i] > averageScore) averageUpStudent++;
    }
    float percent = averageUpStudent/arr.length * 100;
    System.out.printf("%.3f", percent);
}

 

 

[코드]

import java.util.Scanner;

public class AverageScore {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int num  = sc.nextInt();
        if(num < 1 || num > 1000){
            System.out.println("ERROR 숫자가 너무 크거나 작습니다.");
        } else{
            int[] arr = new int[num];
            for (int i = 0; i < num; i++) {
                arr[i] = sc.nextInt();
            }
            average(arr);
        }
    }

    public static void average(int[] arr){
        int totalScore = 0, averageScore = 0;
        float averageUpStudent = 0;
        for (int i = 0; i <arr.length; i++) {
            totalScore += arr[i];
        }
        averageScore = totalScore/arr.length;
        for (int i = 0; i <arr.length; i++) {
            if(arr[i] > averageScore) averageUpStudent++;
        }
        float percent = averageUpStudent/arr.length * 100;
        System.out.printf("%.3f", percent);
    }
}

'CS > 알고리즘 문제' 카테고리의 다른 글

[백준 - 1712] 손익 분기점  (0) 2022.08.29
[백준 - 13458] 시험 감독  (0) 2022.08.28
[백준 - 1110] 새로운 수 찾기  (0) 2022.08.26
[백준 - 2480] 3개의 주사위 게임  (0) 2022.08.26
profile

Tech Blog of Pinomaker

@pinomaker

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!