본문 바로가기
코딩 테스트/[c언어] cos pro 2급 기출문제

[No.10] 평균 이하의 개수 구하기 / cos pro 2급 c언어 기출 문제

by M개발자 2021. 5. 8.
반응형

평균 이하의 개수 구하기


 

문제 설명

 

자연수가 들어있는 배열의 평균을 구하고, 평균 이하인 숫자는 몇 개 있는지 구하려 합니다. 예를 들어 주어진 배열이 [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]이라면, 평균은 5.5이므로 배열에서 평균 이하인 값은 5개입니다.

자연수가 들어있는 배열 data와 data의 길이 data_len이 매개변수로 주어질 때, 배열에 평균 이하인 값은 몇 개인지 return 하도록 solution 함수를 작성했습니다.

그러나, 코드 일부분이 잘못되어있기 때문에 올바르게 동작하지 않으므로 한 줄만 변경해서 올바르게 동작하도록 수정하세요.


예시

 

data data_len return
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 10 5
[1, 1, 1, 1, 1, 1, 1, 1, 1, 10] 10 9


주어진 코드

더보기
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>

int solution(int data[], int data_len) {
    double total = 0;
    for (int i = 0; i < data_len; i++)
        total += data[i];
    int cnt = 0;
    double average = data_len / total;
    for (int i = 0; i < data_len; i++)
        if (data[i] < average)
            cnt += 1;
    return cnt;
}

int main() {
    int data1[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
    int data_len1 = 10;
    int ret1 = solution(data1, data_len1);

    printf("solution 함수의 반환 값은 %d 입니다.\n", ret1);

    int data2[10] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 10 };
    int data_len2 = 10;
    int ret2 = solution(data2, data_len2);

    printf("solution 함수의 반환 값은 %d 입니다.\n", ret2);
}

 

수정

 

double average = data_len/ total ;
    → double average = total data_len;

 

평균 구하는 식 

(num1 + num2 + ... + numN) / N

 

total은 각각의 값들을 더한 값으로 num1 + num2 + ... + numN에 해당한다. 

data_len은 더한 값들이 몇 개인지 센 수(count) 이므로 N에 해당한다.

 

그렇기 때문에 예시 1을 대입하여 봤을 때

data_lentotal로 나눌 경우 10 / 55 = 0.1818과 같이 구하려는 값(평균)이 나오지 않는다. 

 

 


코드 해석 및 전체 코드 

 

for문 1) 0 ~ data_len -1까지 total에 data[i]값을 더한다

 

average) data 배열의 모든 합인 totaldata 배열의 길이로 나눈다. 

 

for문 2) 0 ~ data_len - 1까지 if문을 수행한다.

 

if문) data[i]가 average보다 작을 경우 cnt에 1을 더한다. 

 

total = 55

average = 5.5

1 2 3 4 5 6 7 8 9 10
+1 +1 +1 +1 +1 X X X X X

 

#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>

int solution(int data[], int data_len) {
    double total = 0;
    for (int i = 0; i < data_len; i++)
        total += data[i];
    int cnt = 0;
    double average = data_len / total;
    for (int i = 0; i < data_len; i++)
        if (data[i] < average)
            cnt += 1;
    return cnt;
}

int main() {
    int data1[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
    int data_len1 = 10;
    int ret1 = solution(data1, data_len1);

    printf("solution 함수의 반환 값은 %d 입니다.\n", ret1);

    int data2[10] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 10 };
    int data_len2 = 10;
    int ret2 = solution(data2, data_len2);

    printf("solution 함수의 반환 값은 %d 입니다.\n", ret2);
}

cos pro 2급 기출문제

github

반응형

댓글