🦛 문제
세준이는 기말고사를 망쳤다. 그래서 점수를 조작해 집에 가져가기로 결심했다. 일단 세준이는 자기 점수 중 최댓값을 골랐다. 그런 다음 최댓값을 M이라 할 때 모든 점수를 점수/M*100으로 고쳤다. 예를 들어 세준이의 최고점이 70점, 수학 점수가 50점이라면 수학 점수는 50/70*100이므로 71.43점이다. 세준이의 성적을 이 방법으로 계산했을 때 새로운 평균을 구하는 프로그램을 작성하시오.
🦛 입력
1번째 줄에 시험을 본 과목의 개수 N이 주어진다. 해당 값은 1,000보다 작거나 같다. 2번째 줄에 세준이의 현재 성적이 주어진다. 해당 값은 100보다 작거나 같은, 음이 아닌 정수이고, 적어도 1개의 값은 0보다 크다.
🦛 출력
1번째 줄에 새로운 평균을 출력한다. 실제 정답과 출력값의 절대 오차 또는 상대 오차가 10의 -2 제곱 이하이면 정답이다.
🦛 예제 입력 1
3
40 80 60
🦛 예제 출력 1
75.0
🦛 예제 입력 2
3
10 20 30
🦛 예제 출력 2
66.666667
🦛 예제 입력 3
4
1 100 100 100
🦛 예제 출력 3
75.25
🦛 예제 입력 4
5
1 2 4 8 16
🦛 예제 출력 4
38.75
🦛 예제 입력 5
2
3 10
🦛 예제 출력 5
65.0
🦛 문제 풀이
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int num = sc.nextInt();
int[] score = new int[num];
for(int i=0; i < score.length; i++) {
score[i] = sc.nextInt();
}
int sum = 0;
int max = 0;
for(int i=0; i < score.length; i++) {
if(score[i] > max) max = score[i];
sum += score[i];
}
System.out.println(sum * 100.0 / max / num);
}
}
🦛 문제 분석
최고 점수를 기준으로 전체 점수를 다시 계산해야 하므로 모든 점수를 입력받은 후에 최고점을 별도로 저장해야 한다.
문제에서 제시한 한 과목의 점수를 계산하는 식은 총합과 관련된 식으로 변환할 수 있다.
일일이 변환 점수를 구할 필요 없이 한번에 변환한 점수의 평균 점수를 구할 수 있다.
/* 변환 점수의 평균을 구하는 식(점수가 A,B,C인 경우) */
(A / M * 100 + B / M * 100 + C / M * 100) / 3 = (A + B + C) * 100 / M / 3
'코딩테스트_문제풀이 > 백준' 카테고리의 다른 글
백준 11659번 : 구간 합 구하기 (0) | 2024.10.27 |
---|---|
백준 2751번 : 수 정렬하기 2 (0) | 2024.01.02 |
백준 14425번 : 문자열 집합 (0) | 2024.01.02 |
커트라인 (1) | 2023.12.21 |
수 정렬하기 (0) | 2023.12.21 |