leetcode

66.plus One

냠냠맨 2022. 11. 29. 15:46

문제링크

 

문제정보

 

정수로 이루어진 배열 digits이 매개변수로 주어집니다.
digits[i]는 각각 정수의 자릿수를 의미하며 숫자는 왼쪽에서 오른쪽 순서로 정렬됩니다.
마지막 배열에 1을 더하고 결과를 정수로 이루어진 배열 형태로 반환합니다.

 

 

예시

Input: digits = [9]
Output: [1,0]
Explanation: The array represents the integer 9.
Incrementing by one gives 9 + 1 = 10.
Thus, the result should be [1,0].

 

그리 까다로워 보이지 않는데 9의 처리가 되게 애매한 문제였습니다.

 

9가 나오면 1,0으로 리턴해줘야하고

99가 나오면 1,0,0으로 리턴해줘야했거든요..

 


결국 9의 처리를 완벽하게 하지 못하고 다른 사람의 풀이를 참고했습니다.

var plusOne = function(digits) {
    for(var i = digits.length - 1; i >= 0; i--){
      if(++digits[i] > 9) digits[i] = 0;
      else return digits;
    }
    digits.unshift(1);
    return digits;
  };

감소문으로 배열의 맨 뒷요소부터 접근해줍니다.

 

만약 ++digits[i]가 9보다 크다면 digits[i]는 9라는 뜻일겁니다. 그렇기때문에 digits[i]를 0으로 할당해주고

그 이외의 경우에는 digits를 return 해줍니다.

 

unshift는 배열의 맨 앞에 요소를 추가시켜주는 메서드입니다.

근데 정말 충격적인게 if(++digits[i] > 9)에서 해당되지않고 else로 넘어가서

return digits를 하면 [1,2,3]이 주어졌던 경우 [1,2,4]가 리턴됩니다.

 

그래서 정답이 나와요..

 

이게뭐지??

반응형