포시코딩

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

자료구조알고리즘/문제풀이

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

포시 2023. 1. 5. 13:13
728x90

문제

https://school.programmers.co.kr/learn/courses/30/lessons/120848

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

내 풀이

def solution(n):
    i = 1
    while True:
        if factorial(i) <= n:
            i += 1
        else:
            return i-1
        
    
# 5! = 5*4*3*2*1
# 5! = 5*4!
# n! = n*(n-1)!
def factorial(n):
    if n == 1:
        return 1
    return n*factorial(n-1)

재귀함수를 통해 팩토리얼 표현 후 

i! <= n이 아니게 되는 순간을 캐치해 i-1을 하면 i! <= n을 만족하는 제일 큰 수가 되게 풀었다.

 

다른 풀이

def solution(n):
    base = 1
    m = 1
    while base <= n:
        m += 1
        base *= m
    return m-1

기본적인 개념은 위와 같지만 코드가 제일 깔끔해서 가져왔다.

내 팩토리얼은 5!라면 5에서부터 1을 향해 곱해가는데

1에서부터 올라가며 곱해서 n보다 커지는 m!에 대해 m-1로 리턴한 경우라고 볼 수 있다.

728x90