[LeetCode] Plus One (js)

nRecode·2020년 12월 28일
0

Algorithm

목록 보기
20/48

문제

Given a non-empty array of decimal digits representing a non-negative integer, increment one to the integer.

The digits are stored such that the most significant digit is at the head of the list, and each element in the array contains a single digit.

You may assume the integer does not contain any leading zero, except the number 0 itself.

입출력 예
Input: digits = [1,2,3]
Output: [1,2,4]
Explanation: The array represents the integer 123.

접근

먼저 처음 생각한 방법은 for문을 이용해서 배열의 마지막 요소에 접근하여 +1을하고 다른 요소들은 9일 경우 예외 처리를 해주는 방법이었는데, 이게 각 자리수가 올림처리 되는 경우를 분기하는 방법을 처리를 못해서 다른 방법으로 시도하였다.

그 방법은 join과 split를 이용한 방법이다.

코드

var plusOne = function(digits) {
 
    let digitstring = String(Number(digits.join('')) + 1).split('');
    return digitstring.map((val)=>Number(val));

};

Number와 String을 통해 계속 자료형 변환을 하였으나 결정적으로 [0,1]이라는 digits가 들어왔을 경우 [0,2]를 return하는 것이 아닌 [2]를 return 하므로 테스트에 통과하지 못했다.

해결방법

discuss를 통해 정답을 발견할 수 있었다.

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;

};

처음에 생각했던 for문을 이용해서 배열의 마지막 요소에 접근하는 방법은 같으나,
1. 마지막 요소에 ++후 9를 넘으면 그 요소는 즉시 0이되고 9를 넘지 않으면 바로 return.
2. 마지막 요소가 0이 되었다면 올림이 발생하기 때문에 마지막에서 두번째 요소도 ++를 해주고 9가 넘지 않는지 확인한다. 아니면 return.
3. for문을 return 하지 않고 다 반복했다면 모든 자리에서 올림이 발생한 것이므로 (예[9,9,9,9]) 배열의 왼쪽에 1을 unshift하고 return.

profile
안정성, 확장성 있는 서버를 구축하고 가꾸는 개발자를 목표로 공부하고 있습니다. 🤔🤔🤔🤔 부족하기에 맞지 않는 내용이 있을 수 있습니다. 가감없이 피드백 해주시면 정말 감사하겠습니다..🙏

0개의 댓글