일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 | 31 |
- 프론트엔드
- 자바스크립트코딩테스트
- 알고리즘문제풀이
- JS
- next13
- 자바스크립트 알고리즘
- 리액트
- 리액트쿼리
- react
- 타입스크립트
- CSS
- 자바스크립트 문제풀이
- til
- Next
- 프로그래머스
- 제로베이스
- NPM
- 자바스크립트 알고리즘 문제
- JavaScript
- 자바스크립트 문제 풀이
- Baekjoon
- leetcode
- stack문제
- 자바스크립트 연결리스트
- 자바스크립트 문제
- leetcode문제풀이
- HTML
- Next.js13
- lodash
- 자바스크립트
- Today
- Total
코드노트
Leetcode 66. Plus One / Easy / 자바스크립트 문제 풀이 본문
문제 설명
정수 배열 자릿수로 표현되는 큰 정수가 주어집니다.
여기서 각 자릿수[i]는 정수의 i번째 자릿수입니다.
숫자는 왼쪽에서 오른쪽 순서로 최상위에서 최하위 순으로 정렬됩니다.
큰 정수에는 선행 0이 포함되지 않습니다.
큰 정수를 1씩 증가시키고 결과 배열을 반환합니다.
- 간단하게 말하면 배열로 들어오는 수에 1을 더한값에 1을 더해서 배열로 반환하면 되는 문제
ex ) [ 9, 9 ] 가 들어오면 99에 1을 더해서 [ 1, 0, 0 ] 을 반환하면 된다.
- 처음에 접근할때는 간단하게 생각했다.
- 들어오는 배열의 길이는 최대 100이다. 그렇기 때문에 자바스크립트에서 최대정수 범위를 생각해야한다.
* 9007199254740991 ~ -9007199254740991
- split, sort, join을 통해서 풀려고 했지만 정수범위가 초과되게 되는 test에서는 실패하였다.
문제 풀이
let plusOne = function (digits) {
for (let i = digits.length - 1; i >= 0; i--) {
digits[i]++;
if (digits[i] > 9) {
digits[i] = 0;
} else {
return digits;
}
}
digits.unshift(1);
return digits;
};
만약 [ 9 ] 가 들어오게 되면!
- for를 통해서 i를 현재 들어오는 배열에서 마지막 요소를 넣어준다.
- i는 0보다 크거나 같은지 확인한다. i를 끝 index부터 첫 index까지 for문을 돌아준다.
- 그리고 배열의 요소[ i ]에 ++시킨다.
- 만약 요소가 9보다 크면? / 10이 되었기 때문에 0을 할당 한다.
그리고 for문이 끝나면 unshift를 통해서 1을 넣어주면 [ 1, 0 ] 이 완성된다.
이렇게 문제코드를 작성하면 9를 만났을 때 for문을 돌면서 0으로 바꾸고 그 앞자리에는 ++이 되면서 증가시킨다 그리고 9가 아니면 바로 return이 되기 때문에 한자리수가 아닌 이상 unshift는 실행되지 않는다. 간단하게 뒤의 index들을 확인하고 9인지 아닌지 여부를 통해서 간단하게 풀 수 있는 문제다.
다른 풀이
var plusOne = function (digits) {
return (BigInt(digits.join("")) + BigInt(1)).toString().split("").map((v) => Number(v))
};
- 어떻게 보면 이 문제에 핵심은 큰 수가 들어왔을 때의 문제가 생긴다.
- 그 문제를 Bigint를 통해서 해결했다.
- 배열이 들어오면 join을 통해서 정수로 만들어준다.
- 그리고 그 수에 Bigint(1)을 더해주고 문자열로 변경해준다. split을 사용하기 위해서 변경!
- 그후 map을 통해서 숫자로 바꿔주기만하면 문제는 끝이 난다.
'Code note > 자바스크립트 알고리즘 문제풀이' 카테고리의 다른 글
JavaScript에서의 Map 객체 활용: 데이터 매핑과 효율적인 검색 (0) | 2023.09.14 |
---|---|
프로그래머스 자바스크립트 크기가 작은 부분 문자열 (0) | 2022.12.30 |
프로그래머스 숫자의 표현 자바스크립트 문제 풀이 (0) | 2022.10.06 |
LeetCode 11. Container With Most Water 자바스크립트 문제 풀이 (1) | 2022.09.30 |
알고리즘 문제 오답풀이_1 (1) | 2022.09.29 |