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;
}
'백준 문제와 소스 코드' 카테고리의 다른 글
[코테 스터디] 1676번. 팩토리얼 0의 개수 (0) | 2024.03.20 |
---|---|
003. 구간 합 구하기 1 (구간 합, 배열 초기화, C++ 시간 단축, endl '\n' 차이) (0) | 2024.03.10 |
001. 숫자의 합 구하기 (문자 -> 숫자 혹은 숫자 -> 문자) (0) | 2024.03.08 |
Week 8 (그리디 알고리즘) - 문제 1541번 (잃어버린 괄호) (0) | 2023.08.30 |
Week 8 (그리디 알고리즘) - 문제 2847번 (게임을 만든 동준이) (1) | 2023.08.28 |