#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을 곱하는 것이다.
이 원리로 코드가 만들어진다.
'C language > Baekjoon' 카테고리의 다른 글
[C] 백준 4673번 풀이: 셀프넘버 (0) | 2021.07.03 |
---|---|
[C] 백준 15996번 풀이: 정수 N개의 합 (0) | 2021.07.03 |
[C] 백준 2588번 풀이: 곱셈 (0) | 2021.07.03 |
[C] 백준 10430번 풀이: 나머지 (0) | 2021.07.03 |
[C] 백준 10869번 풀이: 사칙연산 (0) | 2021.07.03 |