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