티스토리 뷰

프로그래밍/BOJ

백준 #10872: 팩토리얼

열무룩 2020. 2. 2. 18:18

 

풀이


 

def factorial(n):
    if n == 1 or n == 0:
        return 1
    
    return n * factorial(n-1)

n = int(input())
print(factorial(n))

 

 

 

접근법


재귀 중에서도 가장 간단한 문제다. 전체적인 흐름을 보면 다음과 같다.

 

                1
             2 * factorial(1)
         3 * factorial(2)
     4 * factorial(3)
 5 * factorial(4) 

 

우선, 위처럼 값을 모두 쌓아둔다. (push) 그리고 각 값을 출력할 때, 메모리 입장에서는 factorial() 값을 모르기 

 

때문에 pop을 해서 factorial(1) = 1 과 같이 값을 거꾸로 찾아간다. 즉, 

 

2 * factorial(1) = 2 * 1 
3 * factorial(2) = 3 * 2 * 1 
4 * factorial(3) = 4 * 3 * 2 * 1 
5 * factorial(4) = 5 * 4 * 3 * 2 * 1 

 

의 순서로 값을 추적한다. 따라서, 먼저 stack을 통해서 쌓아두고, 끝난 뒤에는 거꾸로 pop을 함으로써

 

각 함수의 값을 대입한다. 

 

 

@ 문제 출처 : 백준

'프로그래밍 > BOJ' 카테고리의 다른 글

백준 #2447: 별찍기 [Python]  (1) 2020.02.11
백준 #10870: 피보나치 수 5  (0) 2020.02.02
백준 #1002: 터렛  (0) 2020.01.30
백준 #3053: 택시 기하학  (0) 2020.01.30
백준 #4153: 직각삼각형  (0) 2020.01.27
댓글
링크
최근에 올라온 글
Total
Today
Yesterday