문제
i팩토리얼 (i!)은 1부터 i까지 정수의 곱을 의미합니다. 예를들어 5! = 5 * 4 * 3 * 2 * 1 = 120 입니다. 정수 n이 주어질 때 다음 조건을 만족하는 가장 큰 정수 i를 return 하도록 solution 함수를 완성해주세요.
- i! ≤ n
제한사항
- 0 < n ≤ 3,628,800
입출력 예시
n result
3628800 10
7 3
풀이
풀이
def solution(n):
for i in range(1,12):
num = 1
for j in range(1,i+1):
num*=j
if num > n:
return i-1
break
- 먼저 n 범위 내에서 정수 i 를 증가시켜가며 i! 값을 구해주기 위해 for 문을 2번 사용한다.
- i! 값을 구할 때 변수를 초기화 하여 곱해주기 위해 num=1로 2번 째 for문이 실행 될 때 초기화 시켜준다.
- i!값인 num 이 n을 초과할 때 i의 값을 return 해 주는데 이 때는 팩토리얼 값이 n보다 크므로 그 전 정수인 i-1 값을 리턴해준다.
오답노트
def solution(n):
for i in range(1,n):
num = 1
for j in range(1,i+1):
num*=j
if num > n:
return i-1
break
- 첫 번째 i의 범위에서 range(1,n)으로 주어진 정수 전체의 범위를 주었더니 오답이 나온다.
- 이유는 잘 모르겠는데 알면 댓글좀 부탁드립니다 ... 프로그래머스에서 문의해두었습니다!