728x90
#include <stdio.h>
int main(void) {
    int num;
    scanf_s("%d", &num);
    int student;
    for (int i = 0; i < num; i++) {
        int a[1000];
        int sum = 0;
        double average = 0.0;
        scanf_s("%d", &student);
        for (int i = 0; i < student; i++) {
            scanf_s("%d", &a[i]);
            sum += a[i];
        }
        average = (double)sum / student;
        int count = 0;
        for (int i = 0; i < student; i++) {
            if (average < a[i]) count++;
        }
        printf("%.3lf%%\n", (double)count * 100 / student);
    }
    return 0;
}

이 문제는 조금 많이 어려웠다.

쉽게 만든 총 입력받을 수 설정하기

그렇지만 두번째가 어렵다.

첫번째 숫자는 그 줄에서 총 입력 받을 수를 받는 것이고

그 줄 나머지는 계산하여 평균을 계산해야 한다.

첫 수 입력 받는 것은 쉬우므로 넘어가고

5번째 줄에서 학생 수 변수를 설정한다.

 

하지만 일단 우선적으로 총 몇번 할 것인지가 필요하므로

for문으로 넣어준다.

최대 1000개까지 가능하므로 배열을 1000개 설정하고

sum은 0으로 초기화하고

평균은 소수점이므로 double형으로 0.0으로 설정한다.

그리고 학생수를 저장을 시켜준다. 

c언어는 \n이 없으면 다음 수로 넘어가지 않으므로

%d로 첫번째 수만 설정해줄 수 있다.

 

다음으로는 첫번째 수 저장한 것을 가지고 개수를 세며

배열을 저장시켜준다.

그리고 그 배열을 sum으로 합을 구해준다.

 

평균은 sum에서 student로 나눠주는 것은 알기 쉽다.

하지만 double 형으로 꼭 바꿔줘야 한다.

소수점이 나와야 하기 때문이다.

 

그리고 여기서 한번더 카운트를 해주어야 한다.

솔직히 여기서 조금 의문이긴 했는데

다시 보니 평균을 넘는 학생의 수를 구해야 하니까?

 

출력을 할 때에는 소수점 셋째자리까지이므로 .3lf가 나와야하고

%가 보이기위해 %%두번 표현한다.

그리고 줄바꿈이 나와야 한다.

count * 100 /student가 첨엔 이해가 안되었다.

문제를 기억해야 한다.

평균을 넘는 학생수의 비율을 계산한다.

그러므로 평균을 넘는 학생수에서 설정한 학생수로 나누고

비율인데 0 밑으로 나올 것이므로 100을 곱하는 것이다.

 

이 원리로 코드가 만들어진다.

 

https://www.acmicpc.net/problem/4344

728x90

+ Recent posts