Computer Science/C++

백준 C++ | #9 BOJ4344 평균은 넘겠지 C++ 문제 풀이

토마토. 2022. 8. 7. 15:18

4344번: 평균은 넘겠지 (acmicpc.net)

 

4344번: 평균은 넘겠지

대학생 새내기들의 90%는 자신이 반에서 평균은 넘는다고 생각한다. 당신은 그들에게 슬픈 진실을 알려줘야 한다.

www.acmicpc.net

 

"대학생 새내기 90%는 자신이 반에서 평균은 넘는다고 생각한다."로 시작하는 슬픈 문제

테스트케이스 사이즈에 맞게 배열을 생성해서

학생들의 점수를 입력받고, 평균을 넘는 케이스의 비율을 계산해주면 된다. 

 

제출했을 때 컴파일에러가 발생했는데,

이건 int로 계산해주어야 하는 배열의 크기 변수를 double로 정의해서 생긴 문제였다. 

double* a = new double[array_size] 이 부분에서 array_size 변수가 double이라 컴파일 에러가 난 것. 

참고. 프로그래밍 오류의 종류 - 컴파일 에러/런타임 에러/링킹 에러/논리 에러/파스 에러 (tistory.com)

 

그리고 C++ 소수점은 precision 함수를 이용해서 나타낸다. 

다음 사이트 참고. 

[C++ 소수자리수 다루기] precision & fixed (velog.io)

 

#include <iostream>

int main() {
	int c;
	std::cin >> c;
	double* mean = new double[c];
	for (int i = 0; i < c; i++) {
		mean[i] = 0;
	}

	int tmp_size;
	double tmp_sum, tmp_val, tmp_mean;
	for (int i = 0; i < c; i++) {
		std::cin >> tmp_size;
		tmp_sum = 0; tmp_mean = 0;

		double* tmp_case = new double[tmp_size];
		for (int j = 0; j < tmp_size; j++) {
			tmp_case[j] = 0;
		}
		for (int j = 0; j < tmp_size; j++) {
			std::cin >> tmp_val;
			tmp_sum += tmp_val;
			tmp_case[j] = tmp_val;
		}
		tmp_mean = tmp_sum / tmp_size;

		for (int j = 0; j < tmp_size; j++) {
			if (tmp_case[j] > tmp_mean) {
				mean[i] += 1;
			}
		}
		mean[i] = mean[i] / tmp_size * 100;

	}

	std::cout.precision(3);
	std::cout << std::fixed;
	for (int i = 0; i < c; i++) {
		std::cout << mean[i] << "%" << std::endl;
	}
	return 0;
}