[프로그래머스] 팩토리얼


문제 설명

i팩토리얼 (i!)은 1부터 i까지 정수의 곱을 의미합니다. 예를들어 5! = 5 _ 4 _ 3 _ 2 _ 1 = 120 입니다. 정수 n이 주어질 때 다음 조건을 만족하는 가장 큰 정수 i를 return 하도록 solution 함수를 완성해주세요.

  • i! ≤ n

제한사항

  • 0 < n ≤ 3,628,800
  • before와 after는 모두 소문자로 이루어져 있습니다.

입출력 예

nresult
362880010
73

입출력 예 설명

입출력 예 #1

  • 10! = 3,628,800입니다. n이 3628800이므로 최대 팩토리얼인 10을 return 합니다.

입출력 예 #2

  • 3! = 6, 4! = 24입니다. n이 7이므로, 7 이하의 최대 팩토리얼인 3을 return 합니다.

나의 풀이

function solution(n) {
  var answer = 1;

  var factor = (num) => {
    for (i = 1; i <= num; i++) {
      answer *= i;

      if (answer === num) {
        return (answer = i);
      } else if (answer > num) {
        return (answer = i - 1);
      }
    }
  };
  factor(n);
  return answer;
}

나의 두번째 풀이(Code Refactoring)

function solution(n) {
  let result = 1;
  let factor = 1;
  while (result <= n) {
    result++;
    factor *= result;
    if (factor > n) {
      return result - 1;
    }
  }
}

// 1. result는 증가하는 숫자
// 2. factor는 결과값
// 3. result는 1부터 증가하고 factor에 값을 곱한다
// 4. factor의 값이 n보다 클 경우 result-1을 리턴

참고 할 만한 다른 사람의 코드

function solution(n) {
  for (let i = 1, v = 1; true; v *= ++i) if (v > n) return --i;
}