반응형
문제
대학생 새내기들의 90%는 자신이 반에서 평균은 넘는다고 생각한다. 당신은 그들에게 슬픈 진실을 알려줘야 한다.
입력
첫째 줄에는 테스트 케이스의 개수 C가 주어진다.
둘째 줄부터 각 테스트 케이스마다 학생의 수 N(1 ≤ N ≤ 1000, N은 정수)이 첫 수로 주어지고, 이어서 N명의 점수가 주어진다. 점수는 0보다 크거나 같고, 100보다 작거나 같은 정수이다.
출력
각 케이스마다 한 줄씩 평균을 넘는 학생들의 비율을 반올림하여 소수점 셋째 자리까지 출력한다.
구상
입력받은 테스트 케이스 수(caseCount)만큼 배열(arr1)을 하나 만든다. 평균을 넘은 학생 비율을 저장하기 위함이다.
2. 학생 수를 입력받는다.
3. 입력받은 학생 수(eachCount)만큼 배열(arr2)을 하나 만들고 점수를 입력받는다.
4. 학생들 점수의 총합을 구한다.
5. 평균을 구한다.
6. 점수가 평균 이상인 학생 수(count)를 구한다.
7. 평균이 넘은 학생 비율을 arr1에 저장한다.
8. 출력한다.
코드
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int caseCount = 0; //테스트 케이스 개수
int eachCount = 0; //각 케이스 당 학생 수
double* arr1; //평균 넘는 학생 비율 저장
int* arr2; //각 케이스 저장
scanf("%d", &caseCount);
arr1 = (double*)malloc(sizeof(double) * caseCount);
int i, j;
for (i = 0; i < caseCount; i++) {
scanf("%d", &eachCount);
arr2 = (int*)malloc(sizeof(int) * eachCount); //학생 수만큼 배열 생성
for (int j = 0; j < eachCount; j++) {
scanf("%d", &arr2[j]);
}
int sum = 0;
//총합과 평균 구하기
for (j = 0; j < eachCount; j++) {
sum += arr2[j];
}
double average = (double)sum / eachCount;
//평균 넘는 학생 수 구하기
double count = 0;
for (j = 0; j < eachCount; j++) {
if (arr2[j] > average) count++;
}
//평균 넘는 학생 비율 구하기
arr1[i] = count / eachCount * 100;
}
//소수점 셋째 자리까지 출력
for (i = 0; i < caseCount; i++) {
printf("%.3lf%%\n", arr1[i]);
}
return 0;
}
백준에서 입력을 꼭 끝낸 후 출력할 필요는 없다고 한다. 이 사실을 몰라서 arr1
을 만들고 대입하는 과정을 거쳤는데, 굳이 그러지 않아도 된다.
반응형
'프로그래밍 > Baekjoon' 카테고리의 다른 글
(C언어) 백준 2292. 벌집 (0) | 2020.08.27 |
---|---|
(C언어)백준 1712. 손익분기점 (0) | 2020.08.25 |
(C언어) 백준 1546. 평균 (0) | 2020.08.21 |
(파이썬) 백준 2577. 숫자의 개수 (0) | 2020.08.21 |
(파이썬) 백준 2839. 설탕 배달 (0) | 2020.08.21 |