본문 바로가기

코딩/백준 BOJ

[백준/C언어] 4344번 - 평균은 넘겠지

백준 웹사이트 "4344번 - 평균은 넘겠지" 문제풀이입니다.

언어는 C언어입니다. (제출 언어: C99)

 


문제

 

4344번: 평균은 넘겠지

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

www.acmicpc.net


소스 코드

#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"를 이용하며, "%"를 출력해야 하기에 "%%"를 작성합니다.

반응형