Title
Sum of Digits / Digital Root
Description
In this kata, you must create a digital root function.
A digital root is the recursive sum of all the digits in a number. Given n, take the sum of the digits of 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.
Here's how it works:
digital_root(16)
=> 1 + 6
=> 7
digital_root(942)
=> 9 + 4 + 2
=> 15 ...
=> 1 + 5
=> 6
digital_root(132189)
=> 1 + 3 + 2 + 1 + 8 + 9
=> 24 ...
=> 2 + 4
=> 6
digital_root(493193)
=> 4 + 9 + 3 + 1 + 9 + 3
=> 29 ...
=> 2 + 9
=> 11 ...
=> 1 + 1
=> 2
How Can I Solved
문제 요구사항 정의
digital_root() 함수에 입력된 숫자를 하나씩 나눈뒤 더하여,
그 값이 한자리 수가 될 때 까지 digital_root를 반복하라.
문제 접근
함수의 실행된 결과값을 다시 함수의 인자로 넣어줘야 하므로, 재귀함수이다.
최종적으로 출력되는 값은 < 10 이다.
삼항연산자의 조건은 인자로 들어오는 값이 10 이상인 경우, 인자값을 계산하여 재귀함수를 실행한다.
인자로 들어오는 값이 10 미만인 경우, 최종값으로 반환한다.
(n+='')
digital_root() 함수의 인자로 들어온 숫자 n 을 문자로 바꿔, split() 메서드 사용이 가능하게 만든다.
// n=12345 => n='12345'
.split('')
split('') 메서드를 사용하여, 문자열이 된 숫자를 하나하나씩 나누어 준다.
// n='12345' => ['1','2','3','4','5']
.map(x=> x=x*1)
배열에 문자 형태로 담겨져있는 요소들에 각각 * 1을 하여, '문자'에서 숫자로 변경한다.
// n='12345' => ['1','2','3','4','5']
reduce((a,b)=>{return a+b})
배열 [1,2,3,4,5] 의 총합을 구한다.
// [1,2,3,4,5] => 1+2+3+4+5 =>15
Solution
function digital_root(n) {
return n>=10 ?
(n=(n+='').split('').map(x=> x=x*1).reduce((a,b)=>{return a+b}),
digital_root(n)) :
n
}
'알고리즘 > CodeWars' 카테고리의 다른 글
[CodeWars] javascript - 7kyu - Largest 5 digit number in a series 문제풀이 (0) | 2020.04.24 |
---|---|
[CodeWars] javascript - 6kyu - IQ Test 문제풀이 (0) | 2020.04.21 |
[CodeWars] javascript - 7kyu - Growth Of Population 문제풀이 (0) | 2020.04.14 |
[CodeWars] javascript - 8kyu - Find the first non-consecutive number 문제풀이 (0) | 2020.04.13 |
[CodeWars] javascript - 5kyu - Math Issue 문제 풀이 (0) | 2020.04.07 |
댓글