digitalRoot.js

Codewars 알고리즘 풀이


Problem

  • A digital root is the recursive sum of all the digits in a number.
    • digital root는 숫자로 된 모든 숫자의 재귀(recursive) 합이다.
  • Given n, take the sum of the digits of n.
    • 주어진 숫자 n의 합을 반환한다.
  • If that value has more than one digit, continue reducing in this way until a single-digit number is produced.
    • 해당 값이 두 자리 이상이라면, 한 자릿수 숫자가 생성될 때까지 계속 줄인다.
  • This is only applicable to the natural numbers.
    • 이는 자연수(natural numbers)에만 적용된다.



For example

digitalRoot(942)

> 9 + 4 + 2

> 15 …

> 1 + 5

> 6



Solution 01

function digitalRoot(n) {
  if (n < 10) return n;
  
  n = n.toString().split('');
  let result = 0;
  
  for (let i = 0; i < n.length; i++) {
    result += parseInt(n[i]);
  }
  return result < 10 ? result : digitalRoot(result);
}

digitalRoot(16);   // 7
digitalRoot(942);  // 6


Solution 02

function digitalRoot(n) {
  if (n < 10) return n;
  
  return digitalRoot(n.toString().split('').reduce((total, i) => total + +i, 0));
}

digitalRoot(16);   // 7
digitalRoot(942);  // 6


Solution 03

function digitalRoot(n) {
  return (n - 1) % 9 + 1;
}

digitalRoot(16);   // 7
digitalRoot(942);  // 6