티스토리 뷰

평균은 넘겠지

문제

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

입력

첫째 줄에는 테스트 케이스의 개수 C가 주어진다.

둘째 줄부터 각 테스트 케이스마다 학생의 수 N(1 ≤ N ≤ 1000, N은 정수)이 첫 수로 주어지고, 이어서 N명의 점수가 주어진다. 점수는 0보다 크거나 같고, 100보다 작거나 같은 정수이다.

출력

각 케이스마다 한 줄씩 평균을 넘는 학생들의 비율을 반올림하여 소수점 셋째 자리까지 출력한다.

예제 입력

5
5 50 50 70 80 100
7 100 95 90 80 70 60 50
3 70 90 80
3 70 90 81
9 100 99 98 97 96 95 94 93 91

예제 출력

40.000%
57.143%
33.333%
66.667%
55.556%

출처 Contest > Waterloo's local Programming Contests > 28 September, 2002 D번

해설

코드가 좀 지저분한 게 마음은 안 들지만 정리해서 코딩하기 귀찮다. 입력 횟수를 변수 times로 받는다. 각 입력라인에서 학생 수는 변수 num으로 받는데 최대 1000명이므로 점수를 받아 저장할 배열은 score[1000]으로 선언한다.

  1. 먼저 평균을 구한다.

         for (j = 0; j < num; ++j) {
             scanf("%d", &score[j]);
             sum += score[j];
         }
         avg = sum / num;
  2. 평균이 넘는 학생의 비율을 구한다.

         for (j = 0; j < num; ++j) {
             if (score[j] > avg) {
                 count++;
             }
         }
         result = (float) count / num * 100;
         printf("%.3f%%\n", result);

오랜만에 코딩을 해서 그 사이 연산자에 의해 암시적 캐스팅 규칙이 바뀐 것이지 잘못 기억하고 있는지 모르겠다. 확인해 봐야 하지만 귀찮아서…. 기억대로라면 result = (float) count / num * 100;에서 나눗셈은 따로 float로 캐스팅을 해주지 않아도 연산값이 실수이면 실수를 반환해 주는 것 아니었나? (float) 없이 코딩했더니 결과가 O.OOO%로만 나온다. 어느 하나를 float형으로 캐스팅해 주어야 원하는 결과를 얻을 수 있었다. 주의하자.

소스코드: C

#include <stdio.h>
int main(int argc, char *argv[])
{
    int i, j, times, num, sum, count;
    float avg, result;
    int score[1000];

    scanf("%d", &times);
    for (i = 0; i < times; ++i) {
        sum = 0;
        count = 0;
        scanf("%d", &num);
        for (j = 0; j < num; ++j) {
            scanf("%d", &score[j]);
            sum += score[j];
        }
        avg = sum / num;
        for (j = 0; j < num; ++j) {
            if (score[j] > avg) {
                count++;
            }
        }
        result = (float) count / num * 100;
        printf("%.3f%%\n", result);
    }
    return 0;
}

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/11   »
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
글 보관함
11-25 20:15