매우 간단한 문제긴 한데 놓쳤던 부분이 있어서 시간 소요가 꽤 있었다. 기억을 위해 기록한다!
조합 공식은 위 그림과 같다. 조합은 서로 다른 n개중에 r개를 선택하는 경우의 수를 의미한다. (순서 상관 없음)
팩토리얼을 구현하는 방법이 여러가지가 있으나 재귀함수 구현에 좀 시간이 걸렸다. 부끄럽다... 일단 재귀함수 ... 후 ... return문이 있어야 함수를 빠져나간다... 재귀 억지로라도 계속 손에 익히자 ㅠㅠ! 재귀로 팩토리얼을 구해도 되고 반복문으로 해도 된다.
그러고 나서 나눗셈을 해줘야 하는데 파이썬에서 '/' 과 '//' 연산자 차이를 이제야 다시 알았다.
'/' : 나눗셈 결과를 float형으로 반환
'//' : 나눗셈 결과를 int형으로 반환
그래서 /로 연산해준뒤 형변환하면 틀렸다고 나온다. 뭐 뒤의 자리를 까고 그러다가 그랬겠지..? 어차피 저 결과는 무조건 정수가 나올 수 밖에 없으니까 int형으로 리턴하는 '//' 연산자를 쓰는게 맞겠다.
코드는 다음과 같다.
n, m = map(int, input().split())
def recur_f(n):
if n == 1:
return 1
else:
return n * recur_f(n - 1)
def factorial(n):
result = 1
for i in range(1, n + 1):
result *= i
return result
print(factorial(n) // ((factorial(m) * factorial(n - m))))
'Algorithm > BOJ' 카테고리의 다른 글
[백준] 17103 골드바흐 파티션 - python (0) | 2022.10.10 |
---|---|
[백준] 17087 숨바꼭질 6 - python (0) | 2022.10.10 |
[백준] 15650 N과 M(2) - python (0) | 2022.10.09 |
[백준] 6588 골드바흐의 추측 (난이도 실버 1) - python (0) | 2022.10.08 |
[백준] 2609 최대공약수와 최소공배수 - python (1) | 2022.10.08 |