티스토리 뷰

 

이번 포스팅은 백준 알고리즘 사이트의 4344번 평균은 넘겠지 문제를 C 언어로 코딩해보도록 하겠습니다. 아래 url로 접속하시면 문제를 볼 수 있습니다.

 

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

 

이번 포스팅은 지난 포스팅과 같은 단계로 if문 사용해보기 단계 문제입니다.

 

 

이 문제의 경우 입력 받을 케이스의 수 C와 각 케이스에서 입력 받을 학생의 수 N, 그리고 N명의 각 점수를 입력 받아 각 케이스마다 평균을 넘는 학생들의 비율을 소수점 셋째자리까지 구해 출력하는 문제 입니다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <stdio.h>
void main() {
    int num, i, j, stu, cnt = 0;
    int sco[100];
    double avg = 0;
    scanf("%d"&num);
    
    for(i = 0; i < num; i++){
        scanf("%d"&stu);
        for(j = 0; j < stu; j++){
            scanf("%d", sco[j]);
            avg += (double)sco[j];
        }
        avg = avg/(double)stu;
        
        for(j = 0; j < stu; j++){
            if(avg < (double)sco[j])
                cnt++;
        }
        printf("%.2lf%%\n", ((double)(cnt/stu))*100.0);
        avg = 0;
        cnt = 0;
    }
}
 

 

먼저 케이스의 갯수를 입력 받을 num, 각 케이스 별 학생의 수를 입력 받을 stu, 학생의 성적을 입력 받을 배열 sco의 크기를 100으로 선언해줍니다. 각 케이스의 평균을 구할 avg를 double형으로 지정하고 0으로 초기화 하여주고, 평균이 넘는 학생의 수를 구하기 위한 cnt 변수도 0으로 초기화하여 줍니다.

 

먼저 6라인에서 num으로 케이스의 갯수를 사용자로부터 입력 받게됩니다.

 

7라인부터는 각 케이스에 해당하는 학생의 수와 각 학생의 점수를 입력 받습니다. 먼저 케이스의 수인 num만큼 for문을 실행하고 scanf를 통해 학생의 수를 입력 받은 후, 이중 for문을 통해 각 학생의 점수를 입력받아 sco 배열에 저장합니다. 이후 avg 변수를 통해 sco의 모든 점수를 더하게 되는데 제 코드의 경우 avg는 double형, sco는 int형으로 선언하였기에 sco를 avg에 더할 때 double형으로 강제 형변환을 시켜주어 더해줍니다.

 

이후 avg를 stu만큼 나누어 평균을 구해줍니다.

 

각 케이스 별 평균을 구하였으므로 다시 이중 for문을 이용해 stu수만큼 반복하여 avg 값보다 큰 sco의 배열 값이 존재한다면 cnt를 하나씩 증가시켜 줍니다.

 

최종적으로 모든 값이 다 도출되었다면 printf를 사용해 각 케이스 별 cnt를 통해 전체 중 평균 점수 이상의 비율을 구해주고, 다음 케이스를 위해 avg와 cnt를 초기화시켜 주는 코드입니다.

 

 

저의 경우 코드를 짤 때 즉석에서 빠르게 짜려고 하는 경향이 있어서 코드를 작성하고 나서 블로그 포스팅을 하면 좋은 코드가 아니라고 생각되거나 조금 더 좋은 코드를 짤 수 있다고 생각하는 경우가 있는데, 조금 더 좋은 코드를 작성하게 되면 이후에 수정하여 나갈 계획입니다.

 

 

다음 포스팅에서는 다음 문제의 코드를 보도록 하겠습니다.

 

다음 포스팅에서 봐요 :))

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함