백준 웹사이트 "4344번 - 평균은 넘겠지" 문제풀이입니다.
언어는 C언어입니다. (제출 언어: C99)
문제
소스 코드
#include <stdio.h>
int main(void){
int N;
scanf("%d\n", &N);
for(int i=0; i<N; i++){
int students;
scanf("%d\n", &students);
int scores[students];
int sum = 0;
for(int j=0; j<students; j++){
scanf("%d", &scores[j]);
sum = sum+scores[j];
}
float average = (double) sum/students;
//printf("%f\n", average);
int counter = 0;
for(int k=0; k<students; k++){
if(scores[k]>average){
counter++;
}
}
printf("%.3f%%\n", ((double) counter/students)*100); // '%'출력을 위해 '%%'
}
}
문제 풀이
처음에는 테스트 케이스의 개수를 입력받고 (Line 4, 5), 매 테스트 케이스마다 학생의 수를 입력받습니다 (Line 8, 9). Line 12 ~ 18은 점수들을 입력받고, 동시에 그 점수들의 평균을 계산하는 과정입니다. 이때 Line 14 scanf("%d", &scores[j]);
은 다른 scanf 함수들과 다르게 줄바꿈 \n이 빠져있는데, 이는 학생들의 점수가 연속되어 입력되기에 필요가 없기 때문입니다. Line 17에서 계산되는 평균은 정수라는 보장이 없기에, float형으로 선언해야 하며, 계산 과정에서 '(double)'이 빠져서도 안 됩니다.
Line 20 ~ 26은 위에서 계산한 평균보다 큰 점수가 몇 개나 있는지 확인하는 단계입니다. 'scores' 배열의 요소들을 하나씩 확인하여, 평균을 넘는 점수가 있으면 'counter'변수를 증가시키는 방식으로 개수를 기록합니다. 마지막 Line 26에서 printf 함수를 통해 비율을 출력하는데, 이때 주의할 것이 두 가지가 있습니다. 문제의 조건 중 '반올림하여 소수점 셋째 자리까지 출력'하는 조건이 있기에 "%.3f"를 이용하며, "%"를 출력해야 하기에 "%%"를 작성합니다.
반응형
'코딩 > 백준 BOJ' 카테고리의 다른 글
[백준/C언어] 4673번 - 셀프 넘버 (2) | 2022.01.05 |
---|---|
[백준/C언어] 15596번 - 정수 N개의 합 (0) | 2022.01.04 |
[백준/C언어] 8958번 - OX퀴즈 (0) | 2022.01.02 |
[백준/C언어] 1546번 - 평균 (0) | 2022.01.02 |
[백준/C언어] 3052번 - 나머지 (0) | 2022.01.01 |