티스토리 뷰

 

 

 

 

문제

평균은 자료의 합을 자료의 개수로 나눈 값을 의미합니다.

자연수가 들어있는 배열의 평균을 구하고, 평균 이하인 숫자는 몇개 있는지 구하려 합니다.

예를 들어 주어진 배열이 [1,2,3,4,5,6,7,8,9,10]이라면, 평균은 5.5이므로 배열에서 평균 이하인 값은 5개입니다.

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

그러나, 코드 일부분이 잘못되어있기 때문에, 몇몇 입력에 대해서는 올바르게 동작하지 않습니다.

주어진 코드에서 한 부분만 변경해서 모든 입력에 대해 올바르게 동작하도록 수정하세요.

 

 

 

 

 


 

 

 

 

 

주어진 코드

#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);
}

 

 

 

결과

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

 

 

 

 

 

 


 

 

 

 

 

 

수정된 코드

더보기
더보기
#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 = total/data_len;   // 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);
}

 

 

 

 

코드분석 / 오류

단계 과정
main data배열과 그 길이를 지정한 후 solution함수를 호출한다.
solution data배열 각 원소들의 총합을 저장할 변수 total을 선언한다.
solution - for1 각 원소들의 합을 구하기 위해 data[0]부터 data[data_len - 1]만큼 for문을 실행하여 total에 각 값을 계속 더한다.
solution double average = total/data_len; 을 통해 배열값의 평균을 구한다.
이때 수정되지 않은 코드 double average = data_len/total;을 하면 배열의 길이를 총합으로 나누는 것이기 때문에 원하는 값이 나오지 않는다.
solution - for2 data[i](배열의 각 값)이 평균보다 작을경우 cnt++을 진행한다.
solution 평균보다 작은 수의 개수를 저장한 cnt를 return한다.
main cnt값을 출력한 후 프로그램을 종료한다.

 

 

 

 

예시

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

 

 

 

 

 

 

 

 

 

GroomEdu

 

goorm

구름은 클라우드 기술을 이용하여 누구나 코딩을 배우고, 실력을 평가하고, 소프트웨어를 개발할 수 있는 클라우드 소프트웨어 생태계입니다.

www.goorm.io

 

댓글