002. 평균 (식의 간단화 및 형변환)

2024. 3. 10. 00:37백준 문제와 소스 코드

문제

세준이는 기말고사를 망쳤다. 세준이는 점수를 조작해서 집에 가져가기로 했다. 일단 세준이는 자기 점수 중에 최댓값을 골랐다. 이 값을 M이라고 한다. 그리고 나서 모든 점수를 점수/M*100으로 고쳤다.

예를 들어, 세준이의 최고점이 70이고, 수학점수가 50이었으면 수학점수는 50/70*100이 되어 71.43점이 된다.

세준이의 성적을 위의 방법대로 새로 계산했을 때, 새로운 평균을 구하는 프로그램을 작성하시오.

입력

첫째 줄에 시험 본 과목의 개수 N이 주어진다. 이 값은 1000보다 작거나 같다. 둘째 줄에 세준이의 현재 성적이 주어진다. 이 값은 100보다 작거나 같은 음이 아닌 정수이고, 적어도 하나의 값은 0보다 크다.

출력

첫째 줄에 새로운 평균을 출력한다. 실제 정답과 출력값의 절대오차 또는 상대오차가 10-2 이하이면 정답이다.

예제 입력1

3
40 80 60

예제 출력1

75.0

예제 입력2

3
10 20 30

예제 출력2

66.666667

문제 해결 방법

1. N을 정하고, 문제에 1000 이하의 과목이라 했으니 배열을 만든다(index 1000이하로).

2. 높은 점수를 받는 변수를 만들어 점수 한 개를 받을 때마다 현재 가장 높으 점수와 비교하여

가장 높은 점수를 찾는다.

3. 모든 점수를 바꾸고 바뀐 점수들을 직접 다 더하여 평균을 내는 식을 정리하여 간단한 식을 만든다.

4. (3)의 식을 만들 때 오류를 조심하기 위해 (double)을 통하여 형변환 해준다.

코드

#include<iostream>

using namespace std;

int main()
{
	int N;
	int grades[1000];
	int highest_grade = 0;

	cin >> N;

	int sum = 0;

	for (int i = 0; i < N; i++)
	{
		cin >> grades[i];
		if (highest_grade < grades[i])
			highest_grade = grades[i];
		sum += grades[i];
	}

	double average = ((sum / (double)highest_grade) * 100) / N;

	cout << average;
}