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
'백준 알고리즘 단계별 풀이 (문제 수) > 1차원 배열 (7)' 카테고리의 다른 글
[C++] 평균은 넘겠지 : 4344번 (0) | 2022.06.20 |
---|---|
[C++] OX퀴즈 : 8958번 (0) | 2022.06.20 |
[C++] 나머지 배열에서 서로 다른 값 찾기 : 3052번 (0) | 2022.06.18 |
[C++] 각 자릿수의 숫자 갯수 세기 : 2577번 (0) | 2022.06.18 |
[C++] 배열에서 최댓값 찾고 인덱스 구하기 : 2562번 (0) | 2022.06.18 |