이 문제는 약간 어려웠다.
앞선 문제들과 똑같이 난이도는 Easy인데 처음에 아예 Integer.parseInt해서 변환 후 +1을 하고
다시 그걸 배열에 담아주었다.
(배열에 담아줄때 % 10해줘서 나머지를 뒷배열부터 넣어주었다.)
그런데 이 방법이 계속 에러가 뜨는 것이다.
int[] test = {9,8,7,6,5,4,3,2,1,0};
이러한 배열을 넣어줬을 때 int의 32bit 범위가 넘어가서 에러가 났다.
그래서 Long으로 바꿔줬는데 테스트케이스에 64bit가 넘는 숫자가 있었다.
그 때 이 방법이 아니라는 것을 깨닫고 다른 방법을 찾아보았다.
class Solution {
public int[] plusOne(int[] digits) {
int n = digits.length;
int[] result;
for(int i = n - 1; i >= 0; i--) {
digits[i]++;
if(digits[i] < 10) {
return digits;
}
digits[i] = 0;
}
result = new int[n+1];
result[0] = 1;
return result;
}
}
이 문제는 단순히 배열을 이어붙여서 그걸 숫자로 변환 후 더한다음에 배열에 담는 것이 아니었다.
배열의 뒤에서 1을 더해주고 앞자리 숫자가 변화되지않는 9이하의 상태이면 넘어가고,
10이 되면 앞자리 숫자까지 바꿔줘야하기 때문에 해당자리 숫자는 0으로 남긴다.
자릿수가 변하지 않으면 그대로 넘어가 if(digits[i] < 10) 이부분에서 걸리게 된다.
이 때 완성된 배열을 리턴해주면 그대로 끝이 난다.
하지만 자릿수가 하나 더 커지는 경우에는 위의 if문에 걸리지 않아 완전히 반복문을 돌게 된다.
[9,9,9]의 경우에는 [0,0,0]이 되는것이다.
4자리 숫자를 만들어줘야하니까 기존 배열 사이즈에 1을 더한 새로운 배열을 만들어준다.
새로운 배열 초기화시 [0,0,0,0] 이 상태이기 때문에 맨 앞에 1만 추가해주면 된다.
이처럼 새로운 배열을 리턴하는 것은 1000, 10000과 같은 숫자일 경우에만 해당된다.
'programming > 알고리즘 풀이' 카테고리의 다른 글
[SWEA] 2805. 농작물 수확하기 (0) | 2021.08.04 |
---|---|
[leetcode] 283. Move Zeroes (0) | 2021.06.29 |
[leetcode] 482. License Key Formatting (0) | 2021.06.22 |
[leetcode] 771. Jewels and Stones (0) | 2021.06.21 |
[leetcode] 929. Unique Email Addresses (0) | 2021.06.21 |
댓글