N
: 자연수 (1 ≤ N
≤ 10)
K
: 정수 (0 ≤ K
≤ N
)
✅ 입력 조건
1.N
,K
공백으로 구분해 입력
✅ 출력 조건
1. 이항 계수 계산해 출력
이항 계수란,
주어진 집합에서 원하는 개수만큼 순서 없이 뽑는 조합의 개수이다.
즉, 서로 다른 n
개의 물건 중에서 k
개를 뽑는 경우의 수와 같다.
정의를 식으로 표현하면 다음과 같다.
저 수식을 그대로 구현한다.
먼저, 팩토리얼을 구하는 함수를 정의한 후 수식대로 식을 만들어주어 이항 계수 값을 구한다.
팩토리얼 함수 →
최종 시간복잡도
이고 1 ≤ N
≤ 10이므로 제한 시간 내에 연산이 가능하다.
팩토리얼 함수를 구현해 이항 계수 계산하기
import sys
input = sys.stdin.readline
# N, K 입력
N, K = map(int, input().split())
# 팩토리얼 정의
def factorial(n):
ans = 1
for i in range(2, n+1):
ans *= i
return ans
# 이항 계수 계산
answer = factorial(N) // (factorial(N-K) * factorial(K))
# 원하는 형식으로 출력
print(answer)
#### 팩토리얼 재귀 함수 정의해 풀기
import sys
input = sys.stdin.readline
# N, K 입력
N, K = map(int, input().split())
# 팩토리얼 정의
def factorial(n):
if n == 0 or n == 1:
return 1
else:
return n * factorial(n-1)
# 이항 계수 계산
answer = factorial(N) // (factorial(N-K) * factorial(K))
# 원하는 형식으로 출력
print(answer)
#### 파스칼의 삼각형을 사용한 DP 방법으로 풀기
import sys
input = sys.stdin.readline
# N, K 입력
N, K = map(int, input().split())
# DP 테이블 초기화
DP = [[0] * (N + 1) for _ in range(N + 1)]
# 파스칼의 삼각형을 이용한 DP 테이블 채우기
for i in range(N + 1):
DP[i][0] = 1 # nC0는 항상 1
DP[i][i] = 1 # nCn은 항상 1
for i in range(2, N + 1):
for j in range(1, i):
DP[i][j] = (DP[i - 1][j - 1] + DP[i - 1][j]) % 10007 # 중간 값들도 모듈러 연산 적용
# 원하는 형식으로 출력
print(DP[N][K] % 10007)
r = a % m = a mode m