백준|11051번|이항 계수 2

README·2022년 7월 31일
0

파이썬 PS풀이

목록 보기
62/136

문제설명
숫자 N과 K를 입력받고 두 수의 이항계수를 10007로 나눈 나머지를 출력하는 문제입니다.

작동 순서
1. 두 수를 입력받습니다.
2. N과 K의 이항계수는 N!/(K!*(N-K)!이므로 N!, K!, (N-K)!을 구합니다.
3. 팩토리얼 수를 구할 때 시간을 단축하기 위해 메모이제이션을 활용합니다.
4. 이항계수를 구하면 10007로 나누고 나머지를 출력합니다.

소스코드

import sys
sys.setrecursionlimit(10000000)
memo = [0, 1, 2] + [0]*998


def factorial(num):
    if memo[num] != 0:
        return memo[num]
    else:
        memo[num] = num*factorial(num-1)
        return memo[num]


n, r = map(int, input().split())
if r == 0 or r == n:
    print("1")
else:
    print((factorial(n)//(factorial(r)*factorial(n-r))) % 10007)

후기
이항계수1과 다른 점은 입력되는 수의 범위과 커진 것밖에 없어서 그렇게 어렵지 않게 풀 수 있었습니다. 하지만 다른 사람들의 풀이를 보니 전혀 달느 방법으로 푼 사람이 많던데 똑같은 문제를 풀 때도 다양한 풀이를 활용할 수 있도록 공부해야 할 것 같습니다.

profile
INTP 개발자 지망생

0개의 댓글