티스토리 뷰
문제
평균은 자료의 합을 자료의 개수로 나눈 값을 의미합니다.
자연수가 들어있는 배열의 평균을 구하고, 평균 이하인 숫자는 몇개 있는지 구하려 합니다.
예를 들어 주어진 배열이 [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 |
goorm
구름은 클라우드 기술을 이용하여 누구나 코딩을 배우고, 실력을 평가하고, 소프트웨어를 개발할 수 있는 클라우드 소프트웨어 생태계입니다.
www.goorm.io
'[코테] > [GroomEdu]' 카테고리의 다른 글
[COS PRO 2급] 2차 2번_더 많은 배수 구하기 (C/C++) (0) | 2021.05.08 |
---|---|
[COS PRO 2급] 2차 1번_최대한 많은 쌍의 장갑 갯수 구하기 (C/C++) (0) | 2021.05.08 |
[COS PRO 2급] 9번_중복문자 삭제하기 (C/C++) (0) | 2021.05.07 |
[COS PRO 2급] 8번_펠린드롬 확인하기 (C/C++) (0) | 2021.05.06 |
[COS PRO 2급] 7번_영어 수강 대상자 수 구하기 (C/C++) (0) | 2021.05.06 |
공지사항
최근에 올라온 글
TAG
- lv2
- 구름 기출문제
- 구름에듀
- C
- 구름에듀 기출문제
- YBM
- groom
- 자바
- c언어
- 코딩테스트
- programmers
- 배열활용문제
- Java
- 기출문제
- lv1
- C++
- 코스프로
- 1급
- CosPro
- c언어 기출문제
- 연습문제
- 배열
- Cos Pro
- 알고리즘
- COSPRO 2급
- cospro기출문제
- groomedu
- 프로그래머스
- YBM기출
- cospro기출
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함