728x90
반응형
문제 1546) 평균 문제
문제)
세준이는 기말고사를 망쳤다. 세준이는 점수를 조작해서 집에 가져가기로 했다. 일단 세준이는 자기 점수 중에 최댓값을 골랐다. 이 값을 M이라고 한다. 그리고 나서 모든 점수를 점수/M*100으로 고쳤다.
예를 들어, 세준이의 최고점이 70이고, 수학점수가 50이었으면 수학점수는 50/70*100이 되어 71.43점이 된다.
세준이의 성적을 위의 방법대로 새로 계산했을 때, 새로운 평균을 구하는 프로그램을 작성하시오.
입력)
첫째 줄에 시험 본 과목의 개수 N이 주어진다. 이 값은 1000보다 작거나 같다. 둘째 줄에 세준이의 현재 성적이 주어진다. 이 값은 100보다 작거나 같은 음이 아닌 정수이고, 적어도 하나의 값은 0보다 크다.
출력)
첫째 줄에 새로운 평균을 출력한다. 실제 정답과 출력값의 절대오차 또는 상대오차가 10-2 이하이면 정답이다.
NO | 예제 입력 | 예제 출력 |
1 | 3 40 80 60 |
75.0 |
2 | 3 10 20 30 |
66.666667 |
3 | 4 1 100 100 100 |
75.25 |
4 | 5 1 2 4 8 16 |
38.75 |
5 | 2 3 10 |
65.0 |
6 | 4 10 20 0 100 |
32.5 |
7 | 1 50 |
100.0 |
8 | 9 10 20 30 40 50 60 70 80 90 |
55.55555555556 |
정답 코드)
package java1226;
import java.util.Scanner;
public class Main_1546 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = 0;
double max = 0;
double sum = 0;
double avg = 0;
do {
n = sc.nextInt();
}while(n > 1000);
double arr[] = new double[n];
for(int i=0; i < arr.length; i++) {
do {
arr[i] = sc.nextInt();
} while(arr[i] > 100 || arr[i] < 0);
if(arr[i] > max) {
max = arr[i];
}
}
for(int i=0; i < arr.length; i++) {
arr[i] = arr[i] * 100 / max;
sum+= arr[i];
}
avg = (double)sum / arr.length;
System.out.println(avg);
}
}
처음 입력 받을 수를 n 변수로 지정하고 변수 3개(max, avg, sum)를 지정해 입력할 수 있도록 설정합니다.
max값에 입력 받은 수 중 가장 큰 값을 비교해서 저장합니다.
다음으로 arr[i] 값에 * 100 / max 값을 저장하고 sum에 저장한 후 for문 밖에서 평균 값을 구합니다.
저는 소숫점 출력을 위해서 n을 제외한 모든 변수를 double값으로 받았지만 이건 좋지 못한 코드라고 생각합니다.
다른 분의 예시를 보면 변수를 모두 int로 입력받고 배열을 따로 지정하지 않고 값을 3개 입력 받아서 합을 구합니다.
System.out.println(100.0d * totalScore / maxScore / n);
위의 코드처럼 출력하면 소숫점까지 출력할 수 있습니다.
https://www.acmicpc.net/problem/1546
많은 분들의 피드백은 언제나 환영합니다! 많은 댓글 부탁드려요~~
728x90
반응형
'문제풀기 > 백준 문제풀이' 카테고리의 다른 글
[백준 문제 4344번] 평균은 넘겠지 문제 (0) | 2023.01.06 |
---|---|
[백준 문제 2577번] 숫자의 개수 문제 (0) | 2023.01.02 |
[백준 문제 3052번] 나머지 문제 (0) | 2023.01.01 |
[백준 문제 10951번] A+B-4문제 (hasnext) (0) | 2022.12.26 |
[백준 문제 2884번] 알람 시계 문제 (0) | 2022.12.25 |