문제 설명
=> 정수 배열 num와 정수 k가 입력값으로 주워지면 num 배열에 k을 더한 값을 배열 형태로 리턴하는 문제다.
예시 1)
Input: num = [1,2,0,0], k = 34
Output: [1,2,3,4]
Explanation: 1200 + 34 = 1234
예시 2)
Input: num = [2,7,4], k = 181
Output: [4,5,5]
Explanation: 274 + 181 = 455
예시 3)
Input: num = [2,1,5], k = 806
Output: [1,0,2,1]
Explanation: 215 + 806 = 1021
문제 풀이
- 각 자리수마다 계산하기 위해 정수 k를 배열로 변환
- 배열 num 과 정수 k 의 길이중 긴 길이를 확인
- 긴 길이의 값으로 더하기 연산 하기
- 배열의 길이넘는 연산값은 스프레드 연산자로 배열에 값 추가 하기
정답 코드
var addToArrayForm = function (num, k) { k = String(k).split(''); if (num[0] === 0 || num === null) return k; // 각각의 길이 값 저장 let numlen = num.length - 1, klen = k.length - 1; // 긴 길이의 값 체크 if (klen > numlen) { // 정수 k값의 길이가 길때 진행 for (let i = numlen; i >= 0; i--) { if ((Number(k[klen]) + num[i]) > 9) { // 현재값이 올림이 발생하는지 체크 if (k[klen - 1] !== undefined) { k[klen - 1] = Number(k[klen - 1]) + 1; // 10의자리 계산 k[klen] = (Number(k[klen]) + num[i]) % 10; // 1의자리 계산 if (k[klen - 1] > 9) { // 계산한 값이 올림을 하였을때 이전값도 올림이 발생하는지 체크 for (let j = klen-1; j >= 0; j--) { if (k[j - 1] !== undefined && k[j] > 9) { k[j - 1] = Number(k[j - 1]) + 1; k[j] = Number(k[j]) % 10; } else if (k[j - 1] === undefined && k[j] > 9) { k[j] = 0; k = [1, ...k]; } } } klen--; } else { k[klen] = 0; k = [1, ...k]; } } else if (klen >= 0) { k[klen] = Number(k[klen]) + num[i]; klen--; }; } return k } else { // 배열 num 의 값의 길이가 길때 진행 for (let i = klen; i >= 0; i--) { if (num[numlen] + Number(k[i]) > 9) { if (num[numlen - 1] !== undefined) { num[numlen - 1] += 1; num[numlen] = (num[numlen] + Number(k[i])) % 10; if (num[numlen - 1] > 9) { for (let j = numlen-1; j >= 0; j--) { if (num[j - 1] !== undefined && num[j] > 9) { num[j - 1] += 1; num[j] = num[j] % 10; } else if (num[j - 1] === undefined && num[j] > 9) { num[j] = 0; num = [1, ...num]; } } } numlen--; } else { num[numlen] = (num[numlen] + Number(k[i])) % 10; num = [1, ...num]; } } else { num[numlen] += Number(k[i]) numlen--; }; } } return num; };
열정적으로 문제를 해결하신 게 눈에 보이네요 🤩 문제만 보면 간단하게 해결할 수 있을 것 같지만 정말 쉽지 않은 문제였던 것 같습니다... 😭 그래도 해결하신 걸 보니 정말 대단하십니다🤗 오늘 하루도 수고하셨습니다!!