23.06.26 재채점 결과 반영

이전에는 맞았지만 재채점후 틀린 이유는 https://www.acmicpc.net/board/view/119087때문이다.

따라서 반올림 함수인 round()를 이용하여 다시 풀었다.

 


 

문제설명

 

소스코드

#include<iostream>
#include<cmath> //round 함수를 쓰기위해
using namespace std;
int main()
{
	int tmp; int N;
	cin >> N;
	tmp = N;
	for (int i = 0; i < tmp; ++i)
	{
		cin >> N;
		int* arr = new int[N]; //동적할당
		float avg = 0;
		int count = 0; //평균을 넘는 사람의 수를 저장
		for (int j = 0; j < N; ++j) { cin >> arr[j]; avg += arr[j]; } //입력받고 avg에 더함
		avg = avg / N; // 평균을 구함
		for (int j = 0; j < N; ++j) if (arr[j] > avg) ++count; //평균을 넘는 사람을 증가시킴
		float ans = ((float)count / N) * 100000;
		ans = round(ans);
		ans /= 1000;
		cout << fixed; //소수점 고정
		cout.precision(3); //소수점 아래 3자리까지 표현
		cout << ans << "%" << endl;
		delete[]arr; //메모리 해제
	}
}

 

풀이

  • 학생 수가 몇명인지 입력 받고, 그 숫자만큼 배열을 동적할당
  • 배열에 점수를 입력받고 바로 avg에 더함
  • avg변수의 값을 학생 수 만큼 나눔(평균을 구함)
  • 배열을 돌면서 평균보다 높은 학생을 찾으면 count를 증가시킴
  • 소수점 이하 4째 자리에서 반올림을 위해 (count / N) * 100000을 하고 round()함수를 호출하고 다시 1000으로 나눈다.
  • fiexd로 소수점을 고정시키고, precision(3)으로 소수점 아래 3자리까지만 출력함