반응형


백준 - 단계별로 풀어보기 [4344] 평균은 넘겠지

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

 

 

문제

 

 

대학생들의 점수를 입력 받은 후, 평균을 넘는 학생들의 비율을 구하는 문제이다.

입력은 테스트 케이스의 개수 C와 학생들의 수, 학생들의 점수가 주어진다. 

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

 

 

풀이

 

이차원 배열의 동적 할당과 반복문을 활용하여 풀 수 있는 문제이다.

문제 자체가 정말 다양한 풀이법이 나올 수 있고, 굳이 이차원 배열이 아니고 다른 방법으로 푸는 방법도 있을 것이라고 생각된다.

먼저 테스트 케이스의 개수 C를 입력받은후, C개 만큼의 이차원배열 행을 동적할당한다.

 

int c;
scanf("%d",&c);
int **array = new int*[count];
float *means = new float[count]; //평균은 소수이므로 float자료형

 

그 후 학생의 수는 최대 1000명이라고 했으므로, 열 1000개와 학생 수 1에 해당하는 1001개의 동적할당을 진행해준다.

 

for (int i = 0; i < count; i++)
{
    array[i] = new int[1001];
}

 

그 후엔, 학생들의 수를 입력받고, 해당하는 수 만큼의 점수를 입력받는다. 

그 후 점수의 합을 통해 평균을 구하고, 평균을 넘은 학생들의 수를 세어 비율을 구하면 되는 문제이다.

이 때 소수 셋째자리에서 반올림을 하여 표현하라고 하였으므로,

%.3f 의 형식지정자를 사용하여 출력하면 원하는 출력값을 얻을 수 있다.

 

코드

 

#include <cstdio>
int main() {
    int count;
    scanf("%d",&count);
    int **array = new int*[count];
    float *means = new float[count];
    int sum = 0;
    int goodstudent = 0;
    for (int i = 0; i < count; i++)
    {
        array[i] = new int[1001];
    }
    for (int i = 0; i < count; i++)
    {
        sum = 0;
        scanf("%d",&array[i][0]);
        for (int j = 1; j <= array[i][0]; j++)
        {
            scanf("%d",&array[i][j]);
            sum += array[i][j];
        }
        means[i] = (float)sum / array[i][0];
        for (int j = 1; j <=array[i][0]; j++)
        {
            if(array[i][j] > means[i])
            {
                goodstudent++;
            }
        }
        printf("%.3f%%\n",(float)goodstudent/array[i][0] * 100);
        goodstudent = 0;
    }
    return 0;
}

 

 

평가

 

이차원 배열 활용을 묻는 문제라고 생각된다.

배열의 첫 인자값이 점수가 아니고 학생의 수를 받아오기 때문에 반복문이 조금 복잡해질수는 있다. 필자의 코드도 완전 효율적인 코드는 아닐 수 있다고 생각한다. 이번 문제의 정답률은 38.361%로 매우 낮은편인데, 개인적으로는 왜 저렇게까지 낮은지는 이해가 되지 않는 문제였다. 본 문제에서는 이차원 배열과 동적할당에 대해서 알아두고 가면 좋을 것 같다고 생각한다.

반응형
블로그 이미지

Hyunsoo Luke HA

석사를 마치고 현재는 Upstage에서 전문연구요원으로 활동중인 AI 개발자의 삽질 일지입니다! 이해한 내용을 정리하는 용도로 만들었으니, 틀린 내용이 있으면 자유롭게 의견 남겨주세요!

,