⚡문제 유형
수학,정렬
📝문제
각 자리의 수를 담은 정수 배열이 들어옵니다. 숫자는 왼쪽에서 오른쪽 순서로 최상위에서 최하위 순으로 정렬됩니다. 숫자에 1을 더한 값을 다시 배열로 반환하시오.
📘예시
Input: digits = [1,2,3]
Output: [1,2,4]
Explanation: The array represents the integer 123.
Incrementing by one gives 123 + 1 = 124.
Thus, the result should be [1,2,4].
Input: digits = [4,3,2,1]
Output: [4,3,2,2]
Explanation: The array represents the integer 4321.
Incrementing by one gives 4321 + 1 = 4322.
Thus, the result should be [4,3,2,2].
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].
📗풀이
1. 첫 풀이
처음에는 join을 하고 숫자로 변환시킨 후 1을 더하고 다시 배열로 만들어주는 방식을 생각했다.
하지만 [6,1,4,5,3,9,0,1,9,5,1,8,6,7,0,5,5,4,3] 이 테스트케이스에서 걸렸다.
정답은 [6,1,4,5,3,9,0,1,9,5,1,8,6,7,0,5,5,4,4] , 내 풀이대로라면[6,1,4,5,3,9,0,1,9,5,1,8,6,7,0,5,0,0,0]가 나와서 오답에서 걸렸다.
이유는 자바스크립트에서 표현할 수 있는 정수의 한계때문이다. 따라서 Bigint를 사용해서 처리를 해주는 방식으로 다시 풀었다
2. 두번째 풀이
그냥 for문을 사용해 0~8까지의 숫자라면 +1를 해줘도 다른 자리에 영향을 주지않기 더해주고 바로 반환해줬다. 반면, 9라면 해당 자리를 0 으로 만들어준다.(어짜피 다시 for문을 돌면서 앞에 자리에 1을 더해줌) 만약 배열의 길이가 1자리 수면 앞에 1을 unshift를 해주는 방식으로 풀었다.
📕잘못 푼 코드
var plusOne = function (digits) {
return String(+digits.join("") + 1).split("");
};
📕통과한 코드
var plusOne = function (digits) {
return (BigInt(digits.join("")) + 1n).toString().split("");
};
var plusOne = function (digits) {
for (let i = digits.length - 1; i >= 0; i--) {
if (digits[i] !== 9) {
// 0 ~ 8일때
digits[i] += 1;
return digits;
}
digits[i] = 0; // 0으로 만들어주기
if (i === 0) { //한자리 수 일 때 앞에 1추가해주기
digits.unshift(1);
return digits;
}
}
};
📖참고한 기술글
'자료구조&알고리즘 > 알고리즘' 카테고리의 다른 글
[LeetCode][JS] 1630번 Arithmetic Subarrays (0) | 2022.07.04 |
---|---|
[LeetCode][JS] 150번 Evaluate Reverse Polish Notation (0) | 2022.06.14 |
[LeetCode][JS] 1678번 Goal Parser Interpretation (1) | 2022.06.02 |
[LeetCode][JS] 976번 Largest Perimeter Triangle (0) | 2022.05.27 |
[LeetCode][JS] 1502번 Can Make Arithmetic Progression From Sequence (0) | 2022.05.27 |