프로그래머스 입문 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까지 순회하며 홀수만 배열에 담는다.