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

Jiumn·2023년 1월 22일
0

문제 설명

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

i! ≤ n

제한사항

0 < n ≤ 3,628,800

입출력 예

nresult
362880010
73

입출력 예 설명

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

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

풀이

팩토리얼을 사용하기 위해 math 모듈을 import 한다.
팩토리얼 값을 담은 배열을 만들기 위해 빈 배열을 초기화한다.

팩토리얼 값을 반복문으로 만들 때 범위는 1부터 10까지로 지정한다.
제한사항이 0 < n ≤ 3,628,800으로 나와 있기 때문이다. (3,628,800 = 10!)

math.factorial(i)로 팩토리얼 값을 만들어 배열에 append한다.

팩토리얼 값만 담긴 배열을 만든 후에는 n과 값의 크기를 비교해줘야 한다.

  • n과 팩토리얼 값이 같을 때와
  • n값이 특정 팩토리얼 값 사이에 있을 때
    두 가지 조건을 만들어준다.
    (팩토리얼 값이 n 이하일 때의 i 값을 찾아야 하기 떄문)

팩토리얼 값은 1부터 시작되기 떄문에 j에 1을 더한 값(인덱스는 0부터 시작)을 리턴한다.

import math

def solution(n):
    fact_arr = []
    
    for i in range(1, 11):
        fact_arr.append(math.factorial(i))
        
    for j in range(len(fact_arr)):
        if n == fact_arr[j]:
            return j + 1
        elif n > fact_arr[j] and fact_arr[j + 1] > n:
            return j + 1
profile
Back-End Wep Developer. 꾸준함이 능력이다.

0개의 댓글