본문으로 바로가기

백준 1546번 : 평균 구하기

category 코딩테스트_문제풀이/백준 2024. 10. 27. 12:11

🦛 문제

세준이는 기말고사를 망쳤다. 그래서 점수를 조작해 집에 가져가기로 결심했다. 일단 세준이는 자기 점수 중 최댓값을 골랐다. 그런 다음 최댓값을 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