백준(C언어) 풀이/1차원 배열

백준(C) 4344번 평균은 넘겠지 풀이

개발윗미 2021. 7. 13. 01:42

C로 구현한 4344번 평균은 넘겠지 문제 풀이입니다.

#include <stdio.h>

int main() {
    int n = 0, p=0;
    double score[1001] = {0}, per=0;
    scanf("%d", &n);
    for(int i=0; i<n; i++) {
        int count = 0;
        double avg = 0, result=0;
        scanf("%d", &p);
        for(int j=0; j<p; j++) {
            scanf("%lf", &score[j]);
            avg = avg + score[j];
        }
        result = avg / p;
        for(int z=0; z<p; z++) {
            if(score[z] > result)
                count++;
        }
        per = ((double)count/(double)p) * 100;
        printf("%.3lf%%\n", per);
    }
}

 

첫번째 for문 내부에 두번째 for문을 돌려 입력한 변수 p만큼까지 score배열 각 자리에 점수를 입력하고 평균을 구하기

 

위해 avg 변수에 score배열 각 자리 값을 누적합니다. 두번째 for문이 끝난 직후 누적된 avg 변수를 인원수(변수 p)로

 

나눠 최종 평균값을 result 변수에 할당합니다.

 

마지막 세번째 for문에서는 score 값 중 최종평균값을 넘는 학생의 수를 구하기 위해 if문을 사용하고 count를 1씩

 

증가시키도록 합니다. 마지막 for문까지 끝난 후에는 퍼센트 단위로 출력해야하기 때문에 

 

'(최종평균값을 넘는 학생의 수 / 학생의 수) * 100' 으로 계산해줍니다. 최종 값이 double형으로 계산되어 나타나야 하기

 

때문에 정수형 변수인 count와 p 를 double형으로 강제형변환을 합니다. 

 

문제에 '출력 시 소수점 셋째 자리까지' 가 기재되어 있어 코드 내에서 출력 시 "%.3lf%%\n" 와 같이 작성해줍니다.

 

 

[소감]

이번 문제는 다른 문제에 비해 머리 회전이 굉장히 잘 되었다! 그리고 이전 문제에서 변수 선언 시 위치를 잘못 썼는데

 

이번에 그런 문제점을 의식하면서 신중하게 작성한 덕인걸까! 막힘 없이 문제를 금방 풀 수 있었다 ㅎㅎ


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

 

4344번: 평균은 넘겠지

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

www.acmicpc.net