rueki

백준 1546번 : 평균(C/C++) 본문

C, C++ 문제풀이

백준 1546번 : 평균(C/C++)

륵기 2019. 6. 30. 19:54
728x90
반응형

이 문제의 Point는 입력받은 과목에 대해 세준이만의 방법으로 점수를 어떻게 바꿔서 평균을 내는 지이다.

그러기 위해서는 제일 먼저 최대값을 구하고 '/M*100' 이라는 식을 적용시켜야 한다.

예시로 40, 80, 60 중에서 80점이 최고점수이다. 예제에서 식을 적용해보자

1. 40 / 80*100 = 50

2. 80 / 80*100 = 100

3. 60 / 80*100 = 75

4. Average = (50+100+75) / 3 = 75.00

위의 방식대로 값을 다 구해낼 수 있지만 중요한 점은 출력값이 소수점 두째자리까지 나와야한다는 것이다.

소스 코드를 보자

#include <iostream>
#include <cstdio>
#define _CRT_SECURE_NO_WARNINGS
using namespace std;
int main() {
	int N;
	double arr[1000];
	double max = 0;
	double sum = 0;
	double avg = 0;
	cin >> N;
	for (int i = 0; i < N; i++) {
		cin >> arr[i];
	}
	for(int i = 0; i<N;i++){
		
		if (max < arr[i]) {
			max = arr[i];
		}
		
	}
	for (int i = 0; i < N; i++) {
		arr[i] = (arr[i] / max * 100.0);
		sum += arr[i];
	}
	cout << fixed;
	cout.precision(2);
	cout << sum / N << endl;
	
	return 0;

}

과목 수 N을 제외하고 전부 실수형인 double로 선언해서 계산시에 따로 Type 변환을 하는 번거로움이 없게 하였고

cout<<fixed, cout.precision() 을 통해서 소수점 x자리까지 출력값 고정을 시킬 수가 있다.

그 외의 코드는 배열에 입력받기, 최대값을 찾기위한 비교 for문, 계산 순이다.

728x90
반응형
Comments