code/[프로그래머스] python

[코딩 테스트 연습 입문] 팩토리얼

오리는짹짹 2022. 12. 26. 13:55

문제

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을 비교했다.

..천잰걸? 

 

👀느낀 점

: 답안은 맞았다. (이건 굉장히 뿌듯한 일)

오늘 수업부터 슬슬 함수에 대한 시동이 걸렸다.

즉, 코딩테스트 문제를 풀면서 다룰 수 있는 범위가 넓혀지는 중이라고.. 나혼자 생각했다.

꾸준히 한다면 잘 해낼 수 있을거라고 믿는다.☺☺

제한사항과 입출력 예를 통해 코딩을 더 간결하게 짤 수 있는 방안을 고려할 줄도 알아야겠다.