출처:https://www.acmicpc.net/problem/1546
세준이는 기말고사를 망쳤다. 세준이는 점수를 조작해서 집에 가져가기로 했다. 일단 세준이는 자기 점수 중에 최댓값을 골랐다. 이 값을 M이라고 한다. 그리고 나서 모든 점수를 점수/M100으로 고쳤다. 예를 들어, 세준이의 최고점이 70이고, 수학점수가 50이었으면 수학점수는 50/70100이 되어 71.43점이 된다. 세준이의 성적을 위의 방법대로 새로 계산했을 때, 새로운 평균을 구하는 프로그램을 작성 하시오.
반복문을 여러개 써도 되는 문제이지만, 줄일 수 있는 방법이 없을까하면서, 고민하는데 꽤 걸린 문제이다. 반복문을 여러개 쓴다면, 입출력을 받고 -> max값을 구하고 -> 각각의 원소에 max값을 나눠주고 곱한 값을 더해주고 -> 마지막에 출력
이렇게 해줄 수 있지만,C++의 형변환 때문에 생각보다 귀찮은 작업이 될 수 있다. 그러므로, 살짝 수학적으로 의미가 같게 바꿔서 계산을 해보았다.
이다. 즉, 합을 먼저해주고 나중에 맥스 값을 나눠줘도 상관이 없다.
#include <bits/stdc++.h>
using namespace std;
int main()
{
int N;
double sum = 0;
int max = 0;
cin >> N;
int score[1001] = {};
for (int i = 0; i < N; i++)
{
cin >> score[i];
if (score[i] > max)
max = score[i];
sum += score[i];
}
sum = (sum / max * 100) / N;
cout << sum << '\n';
return 0;
}