코딩 테스트/Programmers - 1

[JS] 자릿수 더하기

hayeonn 2022. 9. 24. 22:35
반응형

[처음 풀이]

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 변환 하고 배열에 담아준다.

배열에 담은 값을 숫자로 변환후 더해주면 끝.