hayeonn 2022. 10. 4. 23:22
반응형

[풀이]

function solution(x) {
  const newArr = x
    .toString()
    .split("")
    .map((arg) => Number(arg));
  let sum = 0;

  for (let i = 0; i < newArr.length; i++) {
    sum += newArr[i];
  }
  return x % sum === 0 ? true : false;
}

1. 새로운 배열을 담을 변수를 만들고 x를 문자열로 변환해준다. (배열에 담기위해서..)

2. 그리고 문자열을 쪼개 배열로 만들고, map 함수를 이용해 숫자로 바꿔준다. 그러면 [1, 0]이 되어 있을 것.

3. 합한 수를 담을 변수를 만든다 (sum)

4. for문을 새로운 배열의 길이만큼 순회시키고, sum 변수에 새로운 배열의 인덱스값들을 모두 누적해 더해준다.

newArr[0] = 1, newArr[1] = 0 이므로 sum은 1 + 0 = 1

5. x를 sum으로 나누어 떨어지면 true반환, 아니면 false반환한다.

10 % 1 = 0 이므로 true

 

[코드 리뷰]

function solution(x) {
  const newArr = x
    .toString()
    .split("")
    .map(Number);
  let sum = 0;
  for (let i = 0; i < newArr.length; i++) {
    sum += newArr[i];
  }
  return x % sum === 0 ? true : false;
}

1. map((arg) => Number(arg)) 를 map(Number)로 바꿔도 숫자로 변환된다.

 

[추가 코드]

1. reduce 이용

function solution(x) {
  const digitSum = String(x)
    .split("")
    .reduce((acc, cur) => acc + Number(cur), 0);

  return x % digitSum === 0 ? true : false;
}

x를 문자열로 바꾸고 쪼갠 후, 숫자로 변환 한 값을 누적해서 더해준다.

예) 10 일 때, 위 과정을 진행하고 reduce 시킬 때 [1, 0] 이므로

초기값 0 + 현재값 1 = 1 이되며

누적값 1 + 현재값 0 = 1 이 결과값이 된다.