최고 점수를 기준으로 전체 점수를 다시 계산해야 하므로 모든 점수를 입력받은 후에 최고점을 별도로 저장해야 한다. 또한 문제에서 제시한 한 과목의 점수를 계산하는 식은 총합과 관련된 식으로 변환할 수 있다.
따라서 일일이 변환 점수를 구할 필요 없이 한번에 변환한 점수의 평균 점수를 구할 수 있다.
(A/M*100 + B/M*100 + C/M*100) / 3
= (M*100)(A+B+C) / 3
= (A+B+C) * 100 / M / 3
변수 N에 과목 수 입력 받기
길이가 N인 1차원 배열 A[] 선언하기
for -> A[i]에 각 점수 저장
for -> 최고점은 max, 총점은 sum에 저장
sum * 100 / max / N 출력
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main2 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
double[] score = new double[n];
StringTokenizer st = new StringTokenizer(br.readLine());
double max_score = 0;
// for (int i = 0; i < n; i++) {
// score[i] = Integer.parseInt(st.nextToken());
// if (score[i] > max_score) {
// max_score = score[i];
// }
// }
//
// double sum = 0;
// for (int i = 0; i < n; i++) {
// score[i] = ((double) score[i] / max_score) * 100;
// sum += score[i];
// }
//
// double average = (double) sum / n;
// System.out.println(average);
// 강의에서 나온 코드 참고해서 효율적으로 수정
long sum = 0;
for (int i = 0; i < n; i++) {
score[i] = Integer.parseInt(st.nextToken());
if (score[i] > max_score) {
max_score = score[i];
}
sum += score[i];
}
// 더 효율적으로 하면 (배열 생성 x)
// for (int i = 0; i < n; i++) {
// int temp = Integer.parseInt(st.nextToken());
// if (temp > max_score) {
// max_score = temp;
// }
// sum += temp;
// }
System.out.println(sum * 100.0 / max_score / n); // 100.0으로 하면 알아서 double 형으로 됨
}
}