persistence.js

Codewars 알고리즘 풀이


Problem

  • Write a function ‘persistence’ that takes in a positive parameter ‘num’ and returns its multiplicative persistence, which is the number of times you must multiply the digits in ‘num’ until you reach a single digit.
    • 양수 매개변수 ‘num’을 사용해서, 곱하기 지속성(multiplicative persistence)을 반환한다.
    • 곱하기 지속성은, 한 자릿수에 도달할 때까지 ‘num’에 숫자를 곱해야 하는 횟수이다.



Solution 01

function persistence(n) {
  for (let i = 0; n > 9; i++) {
    n = n.toString().split('').reduce((total, i) => total * i);
  }
  return i;
}

persistence(30);   // 3 (3*9=27, 2*7=14, 1*4=4)
persistence(999);  // 4 (9*9*9=729, 7*2*9=126, 1*2*6=12, 1*2=2)


Solution 02

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

persistence(30);   // 3 (3*9=27, 2*7=14, 1*4=4)
persistence(999);  // 4 (9*9*9=729, 7*2*9=126, 1*2*6=12, 1*2=2)