1) 문제: 120817. 배열의 평균값
정수 배열 numbers가 매개변수로 주어집니다. numbers의 원소의 평균값을 return하도록 solution 함수를 완성해주세요.
- 0 ≤ numbers의 원소 ≤ 1,000
- 1 ≤ numbers의 길이 ≤ 100
- 정답의 소수 부분이. 0 또는 .5인 경우만 입력으로 주어집니다.
2) 나의 첫 풀이
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
// numbers_len은 배열 numbers의 길이입니다.
double solution(int numbers[], size_t numbers_len) {
double sum = 0;
double answer = 0;
if (0<=numbers && numbers<=1000 && 1<=numbers_len && numbers_len<=100)
for(int i=0; i<=numbers_len; i++) {
sum += numbers[i];
}
answer = sum / numbers_len;
return answer;
}
배열의 요소에 접근하는 법이 한 번에 떠오르지 않았다.
i 변수를 만들어 배열의 요소에 접근 가능하게 했으며 sum 변수를 만듦으로써 배열 요소 각각의 값을 더한 값을 저장할 수 있도록 했다. 결과적으로 논리상 틀리면 안 되는데..! 또 테스트 케이스 2개 중 1개가 틀렸다.
곰곰이 생각해 봤고 틀린 부분을 찾았다.
i <=numbers_len; 이 부분이다.
등호가 있는 경우에는 루프가 numbers_len까지 반복한다. 예를 들어 i가 5인 경우 인덱스 0부터 4까지 총 5개의 인덱스에 접근하게 된다. 인덱스 0에서 인덱스 4까지 가는 게 정상적인 코드인데 등호가 있는 경우 인덱스 5라는 말도 안 되는 경우까지 가게 되는 것이다. 즉 유효하지 않은 배열의 요소에 접근하는 것이므로 오류가 발생하는 것이다.
3) 수정한 풀이
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
// numbers_len은 배열 numbers의 길이입니다.
double solution(int numbers[], size_t numbers_len) {
double sum = 0;
double answer = 0;
for(int i=0; i<numbers_len; i++) {
sum += numbers[i];
}
answer = sum / numbers_len;
return answer;
}
부등호를 지워서 배열의 인덱스 오류를 막을 수 있었다!
4) 한번 더 수정한 풀이
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
// numbers_len은 배열 numbers의 길이입니다.
double solution(int numbers[], size_t numbers_len) {
double sum = 0;
double answer = 0;
if(0<=numbers<=1000 && 1<=numbers_len<=100)
for(int i=0; i<numbers_len; i++) {
sum += numbers[i];
}
answer = sum / numbers_len;
return answer;
}
모든 조건을 만족해야 하기에 배열 각각의 값의 범위와 전체 배열의 크기에 관한 조건을 추가했다.
5) 배운 점
배열의 인덱스 부분을 유의해야 할 것 같다.
또한 며칠간 알고리즘이라기엔 너무 쉬운 몇몇 문제들을 풀어보며 느낀 점은 책으로 볼 때와 상당히 다르다는 것.
내 머릿속으로 하나하나 다 구현해야 하기에 알고 있다고 생각했던 내용들도 직접 구현할 수 없으면 아는 게 아니라는 것.
그래서 앞으로는 새로운 문제를 풀기 전에 이전에 풀었던 문제들을 한 번씩 보고 풀려고 한다.
'Computer Science > PS' 카테고리의 다른 글
[PS] 120898. 편지 (0) | 2023.11.05 |
---|---|
[PS] 120830. 양꼬치 (0) | 2023.11.04 |
[PS] 120829. 각도기 (0) | 2023.11.03 |
[PS] 120831. 짝수의 합 (0) | 2023.11.01 |
[PS] 120810. 나머지 구하기 (0) | 2023.10.31 |