🧩 문제
Do it 알고리즘 코딩 테스트 자바편(구판) 002
https://www.acmicpc.net/problem/1546

💻 풀이
이 문제도 우선 책 참고 안하고 스스로 풀어보았다.
import java.util.Scanner;
public class P1546_평균 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int[] scores = new int[n];
int max = 0;
for (int i = 0; i < n; i++) {
scores[i] = sc.nextInt();
if (max < scores[i])
max = scores[i];
}
double[] newScores = new double[n];
double sum = 0;
for (int i = 0; i < n; i++) {
newScores[i] = (double) scores[i] / max * 100;
sum += newScores[i];
}
System.out.println(sum / n);
}
}
점수를 입력받고 최대값을 기준으로 점수를 각각 변환하여 새 점수 배열에 넣어주고 평균을 구했다.
책의 해설을 보니 일일이 전체 점수를 다시 계산하는 과정 없이 변환 점수의 평균을 구하는 식을 만들어서 간단하게 풀었다.
변환 점수의 평균을 구하는 식(점수가 A, B, C인 경우):
(A / M * 100 + B / M * 100 + C / M * 100) / 3
= (A + B + C) * 100 / M / 3
즉 `점수의 합 * 100 / max / n`이라는 공식을 통해 쉽게 평균을 구할 수 있다.
따라서 책의 코드를 기반으로 좀 더 간단하게 풀어보면 다음과 같다.
import java.util.Scanner;
public class P1546_평균 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int[] scores = new int[n];
int max = 0;
int sum = 0;
for (int i = 0; i < n; i++){
scores[i] = sc.nextInt();
if (scores[i] > max) max = scores[i];
sum += scores[i];
}
System.out.println(sum * 100.0 / max / n);
}
}
📊 시간 복잡도 및 결과
⏱️ 시간 복잡도
입력받은 점수의 개수(n)만큼 for문이 한 번 실행되기 때문에 시간 복잡도는 O(n)이다.
sc.nextInt(), if () 비교, sum 계산 등은 모두 상수 시간(O(1))에 처리되기 때문에 전체 시간 복잡도는 n * O(1) = O(n)이다.
✅ 제출 결과

'CS > Do it 알고리즘 코딩테스트 (자바편)' 카테고리의 다른 글
| [백준] 2018: 수들의 합 5 - JAVA(자바) (0) | 2026.03.04 |
|---|---|
| [백준] 11720: 숫자의 합 - JAVA(자바) (0) | 2026.02.23 |
| Do it 알고리즘 코딩 테스트 자바편(2022년 구판) 시작! (0) | 2026.02.22 |