반응형
문제 설명
정수 n이 매개변수로 주어질 때, n 이하의 홀수가 오름차순으로 담긴 배열을 return하도록 solution 함수를 완성해주세요.
제한사항
- 1 ≤ n ≤ 100
입출력 예
n | result |
10 | [1, 3, 5, 7, 9] |
15 | [1, 3, 5, 7, 9, 11, 13, 15] |
소스코드
Solution.c
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
int* solution(int n) {
// return 값은 malloc 등 동적 할당을 사용해주세요. 할당 길이는 상황에 맞게 변경해주세요.
int a = 0, i;
int* answer = (int*)malloc(((n/2)+1) * sizeof(int));
for(i = 1; i<=n; i= i+2){
answer[a] = i;
a++;
}
return answer;
}
풀이
이번 문제는 n이라는 숫자가 주어지면 그 이하의 숫자 중 홀수만 배열 answer에 넣는 문제이다. 이번 문제의 핵심은 n 이하의 홀수를 배열 안에 어떻게 넣고 그 배열의 크기는 어떻게 지정해 줄지가 가장 중요하다고 생각한다. 그래서 동적 할당을 사용했다. 우선 n을 2로 나눈 값은 n이 홀수일 경우에는 n과 같은 값을 넣어줄 수 없기에 1을 더해주었다. 그리고 int의 크기만큼을 곱해 동적 할당을 해주었다. 홀수를 넣는 것은 for문을 이용하여 값을 넣어주었다.
한마디
동적할당 부분에 대해 더 이해할 수 있었던 문제이다. 처음에는 왜 안되지 했는데 생각해보니 n을 나눠주기만 하면 n이 홀수일 때는 적용이 안된다는 사실을 놓쳤기 때문이었다.
출처: 프로그래머스 코딩 테스트 연습, https://programmers.co.kr/learn/challenges