article thumbnail image
Published 2023. 3. 17. 17:53

66.플러스 원

주어진 정수 배열을 사용하여 큰 정수를 표현합니다.
배열의 각 요소는 정수의 각 자릿수를 나타냅니다.
배열의 순서는 왼쪽에서 오른쪽으로 정렬되어 있으며,
배열의 왼쪽 요소가 정수의 최상위 자릿수를 나타냅니다.
큰 정수에 선행 0이 없습니다.

작성해야 할 함수는 이 정수 배열에 1을 더하고, 결과를 동일한 형식의 정수 배열로 반환해야 합니다.

예제:

입력: [1, 2, 3] (정수 123)
출력: [1, 2, 4] (정수 124)

입력: [4, 3, 2, 1] (정수 4321)
출력: [4, 3, 2, 2] (정수 4322)

입력: [9] (정수 9)
출력: [1, 0] (정수 10)

문제의 목표는 주어진 정수 배열에 1을 더하여 결과를 배열로 반환하는 것입니다.

 

생각한 방법

1. 배열을 문자열로 바꾼다음 숫자로 바꿔준다.
2. 바꾼 결과값에 + 1 을 더해준다.
3. 다시 정수를 배열로 바꿔준다. 

 

작성코드📌

  function plusOne(digits) {
    let numberStr = digits.join("");
    //join() 메서드는 배열의 모든 요소를 연결해 하나의 문자열로 만든다.
    //배열을 문자열로 반환
    let numberBigInt = BigInt(numberStr); //BigInt에 숫자를 넣지않으면 에러가 난다.
    let resultBigInt = numberBigInt + 1n;

    let resultArr = resultBigInt.toString().split("").map(Number);
    return resultArr;
  }

  let digits = [1, 2, 3];
  console.log(plusOne(digits));

 

let numberBigInt = BigInt(numberStr); 를 추가하지 않으면 에러가 발생한다. 왜 일까?

대부분의 경우에서 잘 작동하지만, 매우 큰 숫자의 경우 문제가 발생할 수 있다.

자바스크립트에서 정수는 Number.MAX_SAFE_INTEGER (2^53 - 1)로 제한되어 있는데,

이 값을 초과하는 정수는 정확한 정수 값이 아니라 근사치로 처리되기때문이다. 

따라서 주어진 배열이 매우 큰 정수를 나타내는 경우, 정확한 결과를 얻지 못할 수 있다.

 

 

BigInt 는?

BigInt는 자바스크립트의 내장 객체이며, 대규모 정수를 처리하기 위한 내장 데이터 유형이다.

BigInt를 사용하려면 숫자 뒤에 n을 붙여서 리터럴을 생성하거나,

BigInt() 함수를 사용하여 숫자나 문자열을 BigInt 값으로 변환할 수 있다.

 

 

for문을 사용한 코드🖌️

  function plusOne(digits) {
    let riseNum = 1; //1을 올릴지 말지 결정하는 변수

    for (let i = digits.length - 1; i >= 0; i--) {
      //뒤에서부터 1을 더해준다.
      digits[i] = digits[i] + riseNum; //1을 더해준다.

      if (digits[i] > 9) {
        //10이상이면
        digits[i] = 0; //0으로 초기화
        riseNum = 1; //1을 올려준다.
      } else {
        //10미만이면
        riseNum = 0; //1을 올리지 않는다.
      }
    }
    if (riseNum === 1) {
      digits.unshift(1);
    }
    return digits;
  }

  let digits = [1, 9];
  console.log(plusOne(digits)); //[2, 0]

 

 

'알고리즘 > leetCode' 카테고리의 다른 글

[leetcode] Sqrt(x)  (0) 2023.03.21
[leetcode] Length of Last Word  (1) 2023.03.17
[leetcode] Search Insert Position  (0) 2023.03.17
[leetcode] Find the Index of the First Occurrence in a String  (0) 2023.03.15
[leetcode] Remove Element  (0) 2023.03.14
복사했습니다!