[Level 1] x만큼 간격이 있는 n개의 숫자
문제
"함수 solution은 정수 x와 자연수 n을 입력 받아, x부터 시작해 x씩 증가하는 숫자를 n개 지니는 리스트를 리턴해야 합니다. 다음 제한 조건을 보고, 조건을 만족하는 함수, solution을 완성해주세요."
예시)
x | n | answer |
2 | 5 | [2,4,6,8,10] |
4 | 3 | [4,8,12] |
-4 | 2 | [-4, -8] |
풀이
class Solution {
public long[] solution(int x, int n){
long[] answer = new long[n];
int xx = x;
for(int i = 0; i < n; i++){
answer[i] = xx;
xx += x;
}
return answer;
}
}
이렇게 풀었더니 테스트 코드로는 통과가 됐지만 제출하니 테스트 13, 14에서 실패를 했다.
이유를 모르겠어서 다른 사람들것 참고하니 타입을 long으로 바꾸면 통과가 되는 것 같았다.
(누적 변수의 타입을 long으로 바꾸든, 누적할 때 형변환을 long으로 하든, 파라미터 x의 타입을 long으로 바꾸든 아무튼 long으로 바꿔야 문제가 해결되는것 같았다.)
class Solution {
public long[] solution(int x, int n){
long[] answer = new long[n];
long xx = x;
for(int i = 0; i < n; i++){
answer[i] = xx;
xx += x;
}
return answer;
}
}
나는 누적 변수 타입을 int에서 long으로 변경한 후에 다시 채점을 돌렸더니 통과가 되었다.
int에서 long으로 바꾸면 통과가 된다는건 테스트 코드 13, 14에서 int 타입이 저장할 수 있는 값을 넘는 숫자로 테스트를 했나보다 싶었다.
왜냐하면 정수 타입은 저장할 수 있는 값의 범위를 초과할 경우 다시 최소값부터 저장하기 때문이다.
이 생각이 맞나 싶어서 테스트 코드를 추가해서 코드를 실행시켜 보았다.
int의 최대 저장값인 2147483647을 x값으로 설정했다.
결과는 아래와 같았다.
for문에서 더하면서 int의 저장 값을 넘어가는 숫자가 들어왔으니 -2로 떨어지면서 예상했던 값과 다르게 되었다.
long으로 변경하고 코드를 돌려보았다.
long의 저장 값 범위 안에 있는 숫자이기 때문에 예상한 값이 그대로 들어갔다.
힌트를 어디서 얻었어야 했을까?
애초에 return 값의 타입을 int가 아닌 long으로 설정했다는 것에서 얻었어야 했을까?
그래도 원인을 알아내서 다행이라고 생각한다.
근데 Level 1도 잘 못하는 이유가 뭐야...?
[문제 출처: 프로그래머스]