백준 11050번 바로가기

나의 풀이

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

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