대학생 새내기들의 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 |