평균 이하의 개수 구하기
문제 설명
자연수가 들어있는 배열의 평균을 구하고, 평균 이하인 숫자는 몇 개 있는지 구하려 합니다. 예를 들어 주어진 배열이 [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_len을 total로 나눌 경우 10 / 55 = 0.1818과 같이 구하려는 값(평균)이 나오지 않는다.
코드 해석 및 전체 코드
for문 1) 0 ~ data_len -1까지 total에 data[i]값을 더한다.
average) data 배열의 모든 합인 total을 data 배열의 길이로 나눈다.
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);
}
'코딩 테스트 > [c언어] cos pro 2급 기출문제' 카테고리의 다른 글
[No.12] 더 많은 배수 구하기 / cos pro 2급 c언어 기출 문제 (0) | 2021.05.08 |
---|---|
[No.11] 최대한 많은 쌍의 장갑 개수 구하기 / cos pro 2급 c언어 기출 문제 (0) | 2021.05.08 |
[No.9] 중복 문자 삭제하기 / cos pro 2급 c언어 기출 문제 (0) | 2021.05.07 |
[No.8] 팰린드롬 판단하기 / cos pro 2급 c언어 기출 문제 (0) | 2021.05.06 |
[No.7] 영어 수강 대상자 수 구하기 / cos pro 2급 c언어 기출 문제 (0) | 2021.05.06 |
댓글