[Codewars#6kyu] - Sum of Digits / Digital Root

jihye·2022년 6월 4일
0

알고리즘

목록 보기
3/12
post-thumbnail

문제

n이 주어지면 한 자리로 쪼개서 더한다.
쪼개서 더한 값이 10 이상일 경우, 다시 한 자리로 쪼개서 더하기!!


첫 번째 풀이

function digital_root(n) {
    // 숫자 문자열로 바꾼 뒤, 하나씩 쪼개기
    let numsToString = String(n);
    numsToString = numsToString.split('');
    // console.log(numsToString,'split')
    //쪼갠 문자열배열을 숫자 배열로 변환
    // let numArr = [];
    let stringToNum = numsToString.map(i => Number(i));

    let result = stringToNum.reduce((num, cur) =>  num+=cur);

    // console.log(numsToString.length,'length')
    if(result < 10){
        return result;
    }
    return digital_root(result);

}

두 번째 풀이(리팩토링)

function digital_root(n) {
  // 문자열 => 배열 => 숫자 배열화
  let numArr = String(n).split('').map(i=> Number(i));
  // 숫자 배열 한차례씩 돌면서 이전값 + 현재값
  let result = numArr.reduce((num, cur) =>  num+=cur);

  // 더한 값이 10보다 적으면 return , 아니면 반복
  return result < 10 ?  result : digital_root(result); 
}

digital_root(1234)
profile
프론트엔드 개발자

0개의 댓글