IT 프로그래밍/백준

[C++] 1546 평균

기술1 2024. 3. 16. 21:44
반응형

https://www.acmicpc.net/problem/1546

 

1546번: 평균

첫째 줄에 시험 본 과목의 개수 N이 주어진다. 이 값은 1000보다 작거나 같다. 둘째 줄에 세준이의 현재 성적이 주어진다. 이 값은 100보다 작거나 같은 음이 아닌 정수이고, 적어도 하나의 값은 0보

www.acmicpc.net

풀이


#include <iostream>
#include <vector>

int main()
{
	using namespace std;
	
	int n;
	cin >> n;
	vector<double>data(n);

	for (int i = 0; i < n; i++)
	{
		cin >> data[i];
	}

	int M = 0;

	for (int i = 0; i < n; i++)
	{
		if (data[i] > M)
			M = data[i];
	}

	double sum = 0;
	for (int i = 0; i < n; i++)
	{
		data[i] = (double)data[i] / M * 100;
		sum += (double)data[i];
	}

	cout << (double)sum / n << endl;

	
	return 0;
}

문제 자체는 어렵지 않지만 소수점이 나오기 때문에 웬만해선 double로 해주는 것이 좋습니다. 저 같은 경우는 오름차순에서 sort()를 쓸 수도 있지만 그냥 저런 식으로 최대값을 구하는 M을 만들어서 for문을 통해 풀어줬습니다.

 

이후 나머지도 for문을 통해 출력까지 갔습니다. 

 

이 때 주의해야 할 점이 바로 소수점의 경우 계산이 잘못될 경우 큰 오류가 발생할 수 있기 때문에 정수형과 소수형의 사용을 주의해주셔야 합니다. 만약 정수와 실수 혼합문제가 있을 경우 자동으로 float와 double형 변환이 일어나기 때문에 문제가 발생하지는 않습니다.

 

하지만 오류가 발생할 수 있으므로 어디서든 float와 double로 형변환을 해주는 것을 추천드립니다.

해당 문제는 여러가지 풀이가 있을 수 있습니다. 

반응형

'IT 프로그래밍 > 백준' 카테고리의 다른 글

[C++] 백준 10810번 공넣기  (0) 2024.03.18
[C++] 백준 2562 최댓값  (0) 2024.03.16
[C++] 백준 10818 최소, 최대  (0) 2024.03.16
백준 10807 개수 세기  (0) 2024.03.16
[C++] 25304 영수증  (0) 2024.03.15