자바스크립트 코딩테스트 연습 10일차

Y·2020년 8월 26일
0

문제


내풀이


function add(a, b) {
    let newA = ("0" + a).split('').map(n => Number(n));
    let newB = ("0" + b).split('').map(n => Number(n));
    const answerList = [];
    answerList.length = Math.max(newA.length, newB.length)
    answerList[0] = 0;

    const dec = newA.length - newB.length


    if (dec > 0) {
        for (let i = 0; i < Math.abs(dec); i++) {
            newB.unshift(0);
        }
    } else if (dec < 0) {
        for (let i = 0; i < Math.abs(dec); i++) {
            newA.unshift(0);
        }
    };



    for (let i = 1; i < answerList.length; i++) {
        let partialSum = newA[i] + newB[i];
        if (partialSum >= 10) {
            let k = i;
            answerList[i - 1] += 1;
            while (k != 0) {
                if (answerList[k - 1] >= 10) {
                    answerList[k - 2] += 1;
                    answerList[k - 1] = answerList[k - 1] - 10;
                } else {
                    break
                }
                k--
            }
            answerList[i] = partialSum - 10;
        } else {
            answerList[i] = partialSum;
        }
    }

    if (answerList[0] === 0) {
        answerList.shift();
    }
    return answerList.map(n => String(n)).join('');
}

주먹구구식으로 풀었다.. 덧셈의 원리를 이용하여 각 자리수마다 계산하고, 각자리수의 합이 10이 넘어가면 그 앞 자리수에 1을 더해주었다.

추천 풀이


function add (a, b) {
  var res = '', c = 0
  a = a.split('')
  b = b.split('')
  while (a.length || b.length || c) {
    c += ~~a.pop() + ~~b.pop()
    res = c % 10 + res
    c = c > 9
  }
  return res
}

너무짧아서 당황했다. 천재들은 다르다..

공부


unshift() 메서드는 배열의 맨 앞에 요소를 추가하고, 새로운 길이를 반환한다.

profile
연세대학교 산업공학과 웹개발 JavaScript

1개의 댓글

comment-user-thumbnail
2020년 9월 10일

안녕하세요
이번문제를 풀면서 답을 적었는데 좀많이 다르게 되어있어서 제가 문제를 잘못이해 했는지 몰라서 물어보려고 댓글을 답니다.
일단 이 문제에 답을 전
function DO(n,m) {
m = parseInt(m)
n = parseInt(n)

return (m+n).toString()
}

근데 해답이 엄청 어렵고 해서 혹시 제가 문제에서 놓친게 있나요"?

답글 달기