Persistent Bugger

이조은·2020년 11월 30일
0

Code Kata

목록 보기
3/15
post-thumbnail

Persistent Bugger 문제 확인하기

문제

양수 매개 변수를 갖는 persistence 함수를 완성해야 한다. 이때 이 함수는 단일 숫자가 나올 때까지 몇 번 매개 변수를 이루고 있는 숫자들을 곱해야 하는지를 리턴해야 한다.

For example:

 persistence(39) === 3 // because 3*9 = 27, 2*7 = 14, 1*4=4
                       // and 4 has only one digit

 persistence(999) === 4 // because 9*9*9 = 729, 7*2*9 = 126,
                        // 1*2*6 = 12, and finally 1*2 = 2

 persistence(4) === 0 // because 4 is already a one-digit number

나의 풀이

🙅🏻‍♀️ 첫 번째 풀이

일단 매개 변수가 1자리일 때와 아닐 때의 조건을 나누었다. 1자리가 아닐 때는 각 자릿수를 곱한 것으로 조건을 나누었다.

하지만 이렇게 함수를 짠다면 매개 변수가 2자리 이상일 때 count는 무조건 1이 된다. 이런 식의 코드 진행은 내가 의도한 대로 매개변수가 조건을 거치지만
재귀함수가 실행될 때마다 count 값이 초기화된다는 것이다.

function persistence(num) {
  let count = 0;
  let result = num.toString().split("").reduce((a,b)=>a*b);
  
  if( num < 10 ) {
    return count;
  }

  else if ( result >= 10 ) {
    count ++
    return persistence(result)
  }
  
  else {
    count ++
    return count;
  }
}

🙆🏻‍♀️ 두 번째 풀이

count의 값이 초기화되는 것을 막기 위해서 함수 안에서 while 문을 사용했다.

function persistence(num) {
  let count = 0;
  
  while (num >= 10) {
    num = num.toString().split("").reduce((a,b)=>a*b,1);
    count ++;
  }
  
  return count;
}

모범 답안

☝️ 첫 번째 모범 답안

function persistence(num) {
   var times = 0;
   
   num = num.toString();
   
   while (num.length > 1) {
     times++;
     num = num.split('').map(Number).reduce((a, b) => a * b).toString();
   }
   
   return times;
}

✌️ 두 번째 모범 답안

const persistence = num => {
  return `${num}`.length > 1 
    ? 1 + persistence(`${num}`.split('').reduce((a, b) => a * +b)) 
    : 0;
}
profile
싱글벙글

0개의 댓글