잘 풀리지 않는 자바스크립트알고리즘 sumDigits 디버깅을 통한 문제해결

잘 풀리지 않는 자바스크립트알고리즘 sumDigits 디버깅을 통한 문제해결

비전공자가 IT개발자로, 커리어전환기4

부제 : 잘 풀리지 않는 자바스크립트알고리즘 sumDigits 디버깅을 통한 문제해결하기.

아니 알고리즘문제…왜이렇게 안 풀리는거야?
한 문제가지고 몇시간동안 씨름하고있다.




TIL : a005_sumDigits문제

숫자가 주어졌을때, “sumDigits” 함수는 숫자의 각 자리수를 모두 더한 값을 반환합니다.

1
2
3
4
5
function sumDigits(num) {
//코드를 작성해보세요
}
let output = sumDigits(-316);
console.log(output); // --> 4가 나와야합니다.

아하 반복문으로 돌리면서 조건문을 써야하는 문제구나!




일반 접근

1
2
3
4
5
6
7
8
9
10
11
12
13
14
function sumDigits(num) {
let sum = 0;
let stringNumArr = num.toString().split('');

for (let i = 0; i < stringNumArr.length; i++) {
if (stringNumArr[0] === '-' && i === 1) {
sum = sum - Number(stringNumArr[1]);
} else if (stringNumArr[i] !== '-') {
sum = sum + Number(stringNumArr[i]);
}
}

return sum;
}
1
2
let output = sumDigits(-316);
console.log(output); // --> 4




디버깅을 통한 문제해결

예시대로 디버깅해서 풀어 써보자.

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
32
function sumDigits(num) {
let sum = 0;
let stringNumArr = num.toString().split(''); //=> stringNumArr = ['-', '3', '1', '6']

for (let i = 0; i < 4; i++) {
if (stringNumArr[0] === '-' && 0 === 1) { //=> false
sum = 0 - Number(stringNumArr[1]);
} else if (stringNumArr[0] !== '-') { //=> false
sum = 0 + Number(stringNumArr[0]);
}

if (stringNumArr[0] === '-' && 1 === 1) { //=> true
sum = 0 - Number(stringNumArr[1]); //=> sum = 0 - 3 => sum = -3
} else if (stringNumArr[0] !== '-') { //=> false
sum = 0 + Number(stringNumArr[1]);
}

if (stringNumArr[0] === '-' && 2 === 1) { //=> false
sum = -3 - Number(stringNumArr[1]);
} else if (stringNumArr[0] !== '-') { //=> true
sum = -3 + Number(stringNumArr[2]); //=> sum = -3 + 1 => sum = -2
}

if (stringNumArr[0] === '-' && 3 === 1) { //=> false
sum = -2 - Number(stringNumArr[1]);
} else if (stringNumArr[0] !== '-') { //=> true
sum = -2 + Number(stringNumArr[3]); //=> sum = -2 + 6 => sum = 4
}

}
return sum; //=> 4
}