정수 n이 매개변수로 주어질 때, n 이하의 홀수가 오름차순으로 담긴 배열을 return하도록 solution 함수를 완성해주세요.
class Solution {
public int[] solution(int n) {
int[] answer = {};
int index = 0;
for(int i = 1; i <= n; i+=2) {
answer[index] = i;
index++;
}
return answer;
}
}
위와 같이 코드를 작성하였더니 ArrayIndexOutOfBoundsException이 발생하였다. 요즘 제일 많이 발생하는 오류이다. 발생 원인을 찾아보았더니 여러가지 경우가 존재했다.
- 배열에 할당된 크기를 넘어서 접근했을 때
- 전역 배열의 크기가 메모리 제한을 초과할 때
- 지역 배열의 크기가 스택 크기 제한을 넘어갈 때
- 0으로 나눌 떄
- 라이브러리에서 예외를 발생시켰을 때
- 재귀 호출이 너무 깊어질 때
- 이미 해제된 메모리를 또 참조할 때
- 프로그램(main 함수)이 0이 아닌 수를 반환했을 때
💡 배열 answer의 크기가 실제로 커지지 않아서 1번의 경우가 발생한 것 같다. 해당 부분을 수정하니 오류가 해결되었다.
class Solution {
public int[] solution(int n) {
int[] answer = new int[n/2 + n%2];
int index = 0;
for(int i = 1; i <= n; i+=2) {
answer[index] = i;
index++;
}
return answer;
}
}