N Log

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

문제

출처

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

n result
4 [1, 3]
5 [1, 3, 5]
6 [1, 3, 5]

풀이

배열을 만들어 반환하려면 먼저 배열의 크기를 알아야 한다.

n 짝수 개수 홀수 개수 n / 2 (n + 1) / 2
4 2 2 2 2
5 2 3 2 3
6 3 3 3 3

n이 짝수일 때는 짝수와 홀수의 개수가 같으므로 n / 2로 홀수의 개수를 구할 수 있다.
하지만 n이 홀수일 때는 홀수의 개수가 하나 더 많으므로 (n + 1) / 2로 홀수의 개수를 구해야 한다.

홀수를 만들어 내기

#include <stdlib.h>

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

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

    return odd_numbers;
}

수학에서 홀수는 2n + 1로 나타낼 수 있으므로, 이를 코드로 구현한다.

홀수를 걸러 내기

#include <stdlib.h>

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

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

    return odd_numbers;
}

1부터 n까지 순회하며 홀수만 배열에 담는다.