본문 바로가기
백준 알고리즘 단계별 풀이 (문제 수)/1차원 배열 (7)

[C++] 특정 공식으로 새로운 평균 구하기 : 1546번

by 17번 일개미 2022. 6. 18.
728x90

문제

 

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

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

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

 


풀이

#include <iostream>
using namespace std;

double NewAverage(int* score, int count);

int main()
{
	int count; // 과목 수
	// 과목 수 입력
	cin >> count;
	cin.ignore();
	int* score = new int[count]; // 점수 리스트
	// 점수 입력
	for (int i = 0; i < count; i++)
	{
		cin >> score[i];
	}
	cout << NewAverage(score, count);
	delete[] score; // 메모리 해제
}
double NewAverage(int* score, int count) // 새점수로 평균 계산
{
	int max = score[0]; // 최댓값 저장
	double* newScore = new double[count]; // 새 점수 배열
	double sum = 0; // 평균을 구하기 위한 합
	for (int i = 0; i < count; i++)
	{
		if (max <= score[i]) // 최댓값 선별
		{
			max = score[i];
		}
	}
	// 새 점수 계산 및 더하기
	for (int i = 0; i < count; i++)
	{
		newScore[i] = (double)score[i] / max * 100.0; // double형으로 타입캐스트
		sum += newScore[i];
	}
	return sum / count; // 평균 반환
}

1. 점수 입력 받기

2. 새 점수 공식을 활용하기 위해 최댓값을 뽑아낸다. << 이미 이전에서 많이 다뤘던 최댓값

3. 새 점수 구하는 공식으로 새로 계산하여 double 배열에 넣어준다 << 소수점 단위로 채점을 매기기 때문

4. 점수를 구하는 즉시 sum에 합을 하여준다

5. 평균을 반환하고 메모리 해제

 

코드 길이만 좀 나올 뿐, 일반적인 평균구하기 였던 것 같다.

728x90