프로그래머스 입문 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 / 2는 n이 홀수일 때 홀수의 개수보다 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;
}