![article thumbnail image](https://blog.kakaocdn.net/dn/m4jKc/btr4JLEjHMv/5kkWXxdhbinkQ7zbfXixCk/img.jpg)
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 |