나의 풀이
n, k = map(int, input().split())
ans = 1
for i in range(k):
ans *= (n-i)
ans /= (k-i)
print(round(ans))
python 내장 math 라이브러리 comb() 함수 사용하기
import math
print(math.comb(*map(int,input().split())))
CODE REVIEW
- python 내장 라이브러리 math에 있는 comb() 함수를 이용하면 바로 combination을 구할 수 있지만, 이번에는 구현해보기로 했다.
- 이항정리에 대한 내용은 위키를 참고!
- 처음에 round() 대신에 int()로 변환했을 때에는 정답률 50%에서 실패했는데 원인을 살펴보니 곱하고 나누는 과정에서 55.9999999… 처럼 소수 끝자리가 잘리는 경우에 오류가 발생했다. 따라서 round()을 사용해서 그러한 오류를 제거해줘야한다.
- 이런 문제는 factorial() 함수 만들어 $(n)!\over (r)!(n-r)!$을 계산하면 발생하지 않는 오류이기도 하다.
- 반례 입력: 8 3, 출력: 55, 정답: 56 -> int로 변환할 때 오류 생김.