코드
import math
def solution(n):
answer = 0
while(n >= math.factorial(answer)):
answer +=1
return answer-1
n 이하의 최대 팩토리얼 값을 가지는 수를 구하는 문제이다.
n=7이면 7 이하의 팩토리얼 $3! = 3 \times 2 \times 1 = 6$ 을 가지는 3이 답이다.
n과 팩토리얼을 비교하기 위해 while문을 작성하였고, n 이하이면 계속해서 answer +1을 해주었다.
조건에 부합하지 않을 경우 while문은 자동으로 종료되고, answer-1을 리턴한다.
answer-1을 리턴하는 이유는 아래와 같다.
1) n=7, answer=0 → 7 >= 0! → answer = 0 + 1 = 1
2) n=7, answer=1 → 7 >= 1! → answer = 1 + 1 = 2
3) n=7, answer=2 → 7 >= 2! → answer = 2 + 1 = 3
4) n=7, answer=3 → 7 >= 3! → answer = 3 + 1 =4
5) n=7, answer=4 → 7 < 4! → 조건에 부합하지 않으므로 while문 종료
다음 반복을 위해 answer+1을 해주는 것이기 때문에 while문이 종료될 때 answer는 조건을 만족하지 않는 값이다.
그러므로 answer-1이 n 이하의 최대 팩토리얼을 가지는 수이다.
반응형