내 멋대로 코딩 풀이

[C/C++] BOJ 문제번호 4344 평균은 넘겠지

우리집공돌이곰돌을좋아해 2021. 7. 15. 19:00
반응형

BOJ 문제번호 4344

주어진 문제를 보면 평균을 넘는 인원수를 조사해야하는 것이 핵심이다. 이 문제에서는 2차원 배열을 사용하였는데, 그 이유는 첫번째 줄에 주어지는 조건이 테스트 케이스가 몇 개인지 주어진다. 그러므로 한번만 계산을 하는 것이 아니다. 즉, 테스트 케이스가 C개 주어질 경우 C개의 테스트 케이스의 백분율을 조사하여야 한다. 그렇기 때문에 100xMAX(여기서 MAX는 최대 테스트 케이스의 개수를 의미한다)의 배열을 선언하여 활용하였다.풀이 방향: 1. 테스트 케이스에서 주어진 배열을 입력받으면서 점수의 총합을 계산(반복문을 2번쓰는 것보다 효율적일 것이라 생각)2. 모든 입력을 받은 후 총합을 입력받은 수만큼 나눠 평균을 구한다.3. 구한 평균을 활용하여 다시 저장한 점수들을 체크하면서 평균을 넘었을 경우에 answer라는 변수를 1씩 증가시켰다.4. 모든 점수 조사가 끝난 후 백분율로 나타내기 위해 인원 수 만큼 나누고 100을 곱하여 출력한다.5. 모든 C개의 테스트 케이스를 1번부터 4번까지 반복한다.주의: 평균값은 C개의 테스트 케이스동안 재사용 되므로 1개의 테스트 케이스가 끝날때마다 0.0으로 초기화해주어야 한다.

#include <iostream>

#define MAX 1000

double solution(int arr[], int N, int mean) {
	int i;

	double answer = 0;		// 평균을 넘은 인원 수를 저장하는 변수

	for (i = 0; i < N; i++) 
		if (mean < arr[i])			// i번째 인원의 점수가 mean값을 넘을 경우 answer을 1추가
			answer++;
	answer = answer / N * 100;		// 모든 배열 탐색을 마친 후 인원 수 만큼 나누고 100을 곱함 (백분율 계산)

	return answer;
}
int main() {
	int C, i, N, j;			// C: 테스트 케이스 개수, N: 조사할 인원 수
	double mean = 0.0;		// 해당 테스트 케이스의 평균
	int score[100][MAX];	// 1000개의 테스트 케이스의 점수 저장 배열 

	scanf_s("%d", &C);		// 테스트 케이스의 개수 입력

	for (j = 0; j < C; j++) {
		scanf_s("%d", &N, sizeof(int));			// 조사할 인원의 수

		for (i = 0; i < N; i++) {
			scanf_s("%d", &score[j][i]);		// j번째 테스트 케이스에 i번째 인원의 점수 입력
			mean += score[j][i];				// 점수 입력과 동시에 총합 계산
		}
		mean /= N;			// 계산한 총합을 인원수 만큼 나누어 평균 계산

		printf("%5.3lf%% \n", solution(score[j], N, mean));		// 몇퍼센트의 인원이 넘었는지 출력(유효수자 5자리 소수점 3자리 표기)
		mean = 0.0;			// 사용된 mean값을 0.0으로 초기화
	}


}

채점 결과

 

반응형