[4344] : 백준 평균은 넘겠지(C)

지환·2022년 1월 12일
0

백준(C)

목록 보기
20/47
post-thumbnail

출처 | 백준 : https://www.acmicpc.net/problem/4344

문제

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

입력

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

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

출력

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

<코드>

#include <stdio.h>

int main() {

	int Come = 0;
	scanf("%d", &Come);

	for (int i = 0; i < Come; i++) {
		int Num = 0;
		int score[1000], sum = 0;
		scanf("%d", &Num);
		for (int j = 0; j < Num; j++) {
			scanf("%d", &score[j]);
			sum += score[j]; //sum은 score 즉 5 89 95 29 49 58개의 수를 저장한 값이다.
			//여기서 값을 다 더하고
		}
		double avg = 0.00;
		avg = (double)sum / Num; // 평균을 구한다.
		int count = 0; // 그 다음 평균으로부터 값을 도출한다.
		//count 변수는 돌면서 avg보다 더 큰 값이 있으면 1를 증가시키는 변수다.
		for (int j = 0; j < Num; j++) { // 배열을 돌면서 avg < score[j]보다  크면 count++
			if (avg < score[j])
				count++;
		}
		printf("%.3f%%\n", (double)count * 100 / Num); // 소수점 세자리 수 까지 입력하고 count가 int형이기 떄문에 
		//double형으로 형 변환 했다.
	}
	return 0;
}
  • 전체적으로 반복문이 총 3번 들어갔다.
  • 제일 겉에 있는 반복문은 우리가 입력 할 첫 번 째 5 값이다. (사용자로부터 입력 받는 값)

전체적으로 keyword는 형 변환과 배열을 도는 반복문이다. 핵심 코드를 보자.

1. 제일 겉에 있는 for문

for (int i = 0; i < Come; i++) {
		int Num = 0;
		int score[1000], sum = 0;
		scanf("%d", &Num);

  • 콘솔 창에 맨 윗 부분 5는 이전에 값을 받는 부분이다.
  • 이 반복문은 두 번째 줄을 의미한다. 총 5번의 횟수를 입력 가능하다. 위에서 Come으로 첫 번째 줄 값을 받았기 때문이다.

2. 평균을 구하고 , 배열을 돌리면서 조건을 비교하는 for문

for (int j = 0; j < Num; j++) {
	scanf_s("%d", &score[j]);
	sum += score[j]; //sum은 score 즉 5 89 95 29 49 58개의 수를 저장한 값이다.
			//여기서 값을 다 더하고
	}
	double avg = 0.00;
	avg = (double)sum / Num; // 평균을 구한다.
	int count = 0; // 그 다음 평균으로부터 값을 도출한다.
	//count 변수는 돌면서 avg보다 더 큰 값이 있으면 1를 증가시키는 변수다.
for (int j = 0; j < Num; j++) { // 배열을 돌면서 avg < score[j]보다  크면 count++
	if (avg < score[j]) count++;
		}
        printf("%.3f%%\n", (double)count * 100 / Num); // 소수점 세자리 수 까지 입력하고 count가 int형이기 떄문에 
		//double형으로 형 변환 했다.

  • 총 2개의 for문이 존재한다. 큰 틀의 for문과 작은 2개의 for문이 있다.
  • 먼저 위에 for문을 보자. scanf으로 값을 받고, 그 값은
    5 89 90 28 42 45 => score[0], score[1], ··· 으로 받는다.
  • 그 이후 값을 전부 다 더했다. 왜냐하면 평균을 구해야 되기 때문이다.
  • 다음 avg에 평균 값을 집어 넣고 평균과 학생들의 점수를 비교하는 과정만 남았다.
  • for문을 통해서 배열을 돈다 -> if문으로 조건을 만듦 -> 해당 되면 count++
  • 맨 마지막 printf문에서 그 비율을 구한다.
profile
아는만큼보인다.

0개의 댓글