[코딩 테스트 연습 입문] 팩토리얼
문제
i팩토리얼 (i!)은 1부터 i까지 정수의 곱을 의미합니다. 예를들어 5! = 5 * 4 * 3 * 2 * 1 = 120 입니다. 정수 n이 주어질 때 다음 조건을 만족하는 가장 큰 정수 i를 return 하도록 solution 함수를 완성해주세요.
- i! ≤ n
❗제한사항❗
- 0 < n ≤ 3,628,800
입출력 예
입출력 예 설명
입출력 예 #1
- 10! = 3,628,800입니다. n이 3628800이므로 최대 팩토리얼인 10을 return 합니다.
입출력 예 #2
- 3! = 6, 4! = 24입니다. n이 7이므로, 7 이하의 최대 팩토리얼인 3을 return 합니다.
✔풀이
def solution(n):
f = 1
num = 1
while f<=n:
f*=num
if f>n:
break
else:
num+=1
return num-1
📝설명
팩토리얼 값을 계산하는 변수는 f라고 정의했다.
num은 팩토리얼의 해당 값, 즉 결과로 return되는 수와 관련이 있는 수로, 1로 정의한다.
while문을 통해서 f의 값을 계속해서 불려나간다.
while문의 조건이 참일 동안에는 f에 num을 곱한다.
만약 그 곱한 값이 n을 초과한다면, num을 더해서 while문을 계속해야 할 필요가 없다.
따라서 if문을 통해 f와 n을 다시 비교해서 f가 n보다 크다면 동작을 멈추도록 하고, else문은 while을 계속하기 위해 num에 1을 더한다!
이렇게 되면 num이 기존 수보다 1씩 커지는데, return에서 -1로 해서 결과를 조정하면 끝!
👑모범 답안
🔎제한사항의 n과 입출력 예를 통해 k의 최대값을 구할 수 있었다.
이 답안에서는 math의 factorial을 이용해서 k의 팩토리얼과 n을 비교했다.
..천잰걸?
👀느낀 점
: 답안은 맞았다. (이건 굉장히 뿌듯한 일)
오늘 수업부터 슬슬 함수에 대한 시동이 걸렸다.
즉, 코딩테스트 문제를 풀면서 다룰 수 있는 범위가 넓혀지는 중이라고.. 나혼자 생각했다.
꾸준히 한다면 잘 해낼 수 있을거라고 믿는다.☺☺
제한사항과 입출력 예를 통해 코딩을 더 간결하게 짤 수 있는 방안을 고려할 줄도 알아야겠다.