989. Add to Array-Form of Integer

Leekimoon·2022년 6월 15일
1

문제 설명

=> 정수 배열 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

문제 풀이

  1. 각 자리수마다 계산하기 위해 정수 k를 배열로 변환
  2. 배열 num 과 정수 k 의 길이중 긴 길이를 확인
  3. 긴 길이의 값으로 더하기 연산 하기
  4. 배열의 길이넘는 연산값은 스프레드 연산자로 배열에 값 추가 하기

정답 코드

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;
};
profile
FrontEnd Developer

2개의 댓글

comment-user-thumbnail
2022년 6월 15일

열정적으로 문제를 해결하신 게 눈에 보이네요 🤩 문제만 보면 간단하게 해결할 수 있을 것 같지만 정말 쉽지 않은 문제였던 것 같습니다... 😭 그래도 해결하신 걸 보니 정말 대단하십니다🤗 오늘 하루도 수고하셨습니다!!

답글 달기
comment-user-thumbnail
2022년 6월 16일

easy 난이도였지만 실제로는 쉽지 않았던 것 같아요! 문제 푸는데 고민을 많이 하신게 보입니다!! 🤭 수고하였습니다👍

답글 달기