class Solution {
public int[] solution(int n, int[] slicer, int[] num_list) {
int[] answer;
int a = slicer[0];
int b = slicer[1];
int c = slicer[2];
int cnt = 0;
switch(n){
case 1: answer = new int[b + 1];
for(int i = 0; i <= b; i++){
answer[cnt] = num_list[i];
cnt++;
}
break;
case 2: answer = new int[num_list.length - a];
for(int i = a; i < num_list.length; i++){
answer[cnt] = num_list[i];
cnt++;
}
break;
case 3: answer = new int[b - a + 1];
for(int i = a; i <= b; i++){
answer[cnt] = num_list[i];
cnt++;
}
break;
case 4: answer = new int[(b - a + 2) / c];
for(int i = a; i <= b; i += c){
if(cnt == (b - a + 2) / c) break;
answer[cnt] = num_list[i];
cnt++;
}
}
return answer;
}
}
/Solution.java:35: error: variable answer might not have been initialized
문제를 풀던 중 위와 같은 에러가 발생하였습니다.
반환할 변수 answer가 초기화되지 않았다는 내용인데, 처음에는 왜 이런 에러가 발생하는지 이해하지 못했습니다. 배열 answer를 선언하고 case문에서 초기화했는데 왜 초기화되지 않았다는 에러가 나오는지 이해가 가지 않았습니다.
그래서 switch문을 사용하는 다른 사례들을 살펴보니 대부분 case문 맨 아래에 default문이 들어가있었었습니다. 그래서 혹시 if문의 else처럼, 모든 경우를 커버하지 않아서 발생하는 문제인가 싶어서 case 4를 default로 변경해봤습니다. 그랬더니 에러 없이 잘 실행되는 것을 확인했습니다.
다음으로 문제에서 정의된 n의 범위가 1, 2, 3, 4로 한정되어 있어서, default로 처리하면 마지막 4 외에 다른 수가 올 때도 실행될 수 있기에 이 방법이 아닌 다른 방법을 찾아봤습니다.
그렇게 찾다 보니, 처음 answer 배열을 선언할 때 int[] answer = null; 이렇게 빈 값을 넣어주면 default를 추가하지 않더라도 문제없이 실행되는 것을 확인했습니다.