N Log

프로그래머스 입문 120813 짝수는 싫어요

문제

출처

1 이상 100 이하인 정수 n이 매개변수로 주어진다.
1부터 n까지의 홀수를 오름차순으로 담은 배열을 반환하시오.

n result
10 [1, 3, 5, 7, 9]
15 [1, 3, 5, 7, 9, 11, 13, 15]

풀이

배열을 만들어 반환하려면 먼저 배열의 크기를 알아야 한다.
배열의 크기는 홀수의 개수로 결정되는데, n은 짝수일 수도 있고 홀수일 수도 있다.

n 짝수 개수 홀수 개수 n / 2 (n + 1) / 2
9 4 5 4 5
10 5 5 5 5

정수 나눗셈에서 n / 2n이 홀수일 때 홀수의 개수보다 1 작아서 원하는 값이 나오지 않는다.
그래서 (n + 1) / 2로 계산하면 n이 짝수일 때와 홀수일 때 모두 홀수 개수를 구할 수 있다.

홀수를 만들어 내기

#include <stdlib.h>

int* solution(int n)
{
    int odd_count = (n + 1) / 2;
    int* result = (int*)malloc(sizeof(int) * odd_count);

    for (int i = 0; i < odd_count; i++)
    {
        result[i] = 2 * i + 1;
    }

    return result;
}

홀수를 걸러 내기

#include <stdlib.h>

int* solution(int n)
{
    int odd_count = (n + 1) / 2;
    int* result = (int*)malloc(sizeof(int) * odd_count);
    int count = 0;

    for (int i = 1; i <= n; i++)
    {
        if (i % 2 == 1)
        {
            result[count++] = i;
        }
    }

    return result;
}