반응형
[처음 풀이]
function solution(n) {
const nArr = n.toString().split("");
let sum = "";
let result = 0;
for (let i = 0; i < n.length; i++) {
sum += nArr[i];
result = Number(sum);
}
return result;
}
계속 답이 0이 나온다. 그래서 풀이를 바꿈
function solution(n) {
let result = 0;
n = n.toString();
for (let i = 0; i < n.length; i++) {
result += parseInt(n[i]);
}
return result;
}
굳이 배열로 받을 필요 없이 문자열에서 바로 str[i]를 통해 뽑는게 더 쉬운 것 같다.
[코드 리뷰]
1. 첫번째 풀이의 오류
일단 오류가 많다.
1) for 문을 돌릴 때 n.length 만큼 돌릴 수 없다.
solution 함수의 인자인 n은 숫자다. 숫자는 배열과 문자열처럼 length 프로퍼티를 갖지 않는다.
따라서 n.length는 undefined기 때문에 for문이 반복되지 않아 원하는 결과가 나올 수 없다.
2) sum 은 숫자여야 하는데 초기에 문자열("")로 초기화 했다.
이때 문자열이 아니라 0으로 초기화 해야한다. 또한 += 연산을 통해 값을 누적시키는데
nArr[i] 역시 문자열이므로, += 할 때 숫자로 변경해야 한다.
3) 매번 반복문을 돌릴 때마다 result에 할당하는건 비효율적이다.
결과적으로, n을 문자열로 변환하고 순회하면서 result에 누적하는데 이때도 parseInt 또는 Number() 숫자 형변환 후 누적해야한다.
[추가 코드]
1. reduce
function solution(n) {
return n
.toString()
.split("")
.reduce((acc, cur) => acc + Number(cur), 0);
}
n을 string 변환 하고 배열에 담아준다.
배열에 담은 값을 숫자로 변환후 더해주면 끝.
'코딩 테스트 > Programmers - 1' 카테고리의 다른 글
[JS] 내적 (0) | 2022.09.26 |
---|---|
[JS] 약수의 합 (1) | 2022.09.25 |
[JS] 2016년 (0) | 2022.09.24 |
[JS] 짝수와 홀수 (0) | 2022.09.24 |
[JS] 문자열 다루기 기본 (0) | 2022.09.24 |