코딩테스트 | (c++) 백준 4344번: 평균은 넘겠지

trevor1107·2021년 5월 21일
0

✅문제

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

문제 보기

🎹입력

첫째 줄에는 테스트 케이스의 개수 C가 주어진다.

둘째 줄부터 각 테스트 케이스마다 학생의 수 N(1 ≤ N ≤ 1000, N은 정수)이 첫 수로 주어지고, 이어서 N명의 점수가 주어진다. 점수는 0보다 크거나 같고, 100보다 작거나 같은 정수이다.

📢출력

각 케이스마다 한 줄씩 평균을 넘는 학생들의 비율을 반올림하여 소수점 셋째 자리까지 출력한다.

✍풀어보기

#include <iostream>

using namespace std;

int main() {

	// 테스트 케이스의 개수 C를 입력 받는다
	int testCase;
	cin >> testCase;

	// 소수점 자리수 설정(기본 반올림)
	cout << fixed; // 소수점 자리수 설정 
	streamsize prec =  cout.precision(); // 현재 기본 자리수 저장
	cout.precision(3); // 자리수 고정(fiexd로 인해 소수점 고정)

	int n; // 케이스별 학생 수
	int count = 0; // 평균을 넘는 학생들의 수
	int students[1000] = { 0 }; // 학생들의 점수를 담는 배열
	double average;

	for (int i = 0; i < testCase; i++)
	{
		average = 0;

		// 각 테스트 케이스마다 학생의 수가 첫 수로 주어지고,
		// 이어서 n명의 점수가 주어진다.
		cin >> n;
		for (int k = 0; k < n; k++)
		{
			cin >> students[k];
			average += students[k];
		}

		// 평균값을 구한다.
		average /= n; 
		
		count = 0;
		for (int k = 0; k < n; k++)
		{
			// 평균을 넘는 학생의 수를 증가시킨다.
			if (average < students[k])
				count++;
		}

		// 평균을 넘는 학생들의 비율 값을 구하여 출력한다.
		cout << (double)count / n * 100 << "%" << endl;
	}

	cout.unsetf(ios::fixed); // 소수점 고정 해제
	cout.precision(prec); // 자리수 고정 해제

	return 0;
}

cout 소수점 자리수 변경하기

cout << fixed;는 소수점을 고정시켜 출력하겠다는 뜻이다.
cout.precision(num);는 num자리의 숫자까지 표현하겠다는 뜻이다.
이 두가지를 같이 사용해야 소수점 자리수를 원하는대로 변경이 가능하다.
예를들어 cout << fixed; cout.precision(3);의 경우는 소수점 3자리까지 표현하는 명령이다.
소수점 고정을 해제하려면 cout.unsetf(ios::fixed); 명령어를 작성하면 된다.
그리고 기본적으로 나머지 버려지는 자리수는 반올림된다.

cout.unsetf(ios::fixed); 명령어를 통해 소수점을 해제해도 처음 설정한 자리수는 남아있다. 그래서 위에서 사용한 cout.precision(num);을 초기화하려면
std::streamsize prec = cout.precision();와 같이 변수에 저장해두고 다시 cout.precision(prec);로 설정해주면 된다.



참고 자료 및 사이트 (감사합니다)

profile
프론트엔드 개발자

0개의 댓글