첫 번째 풀이
import itertools
for _ in range(int(input())):
  n, m = map(int, input().split())
  print(len(list(itertools.combinations(range(m),n))))
두 번째 풀이
def factorial(n):
  k = 1
  for i in range(n):
    k *= (i+1)
  return k
for _ in range(int(input())):
  n, m = map(int, input().split())
  print(round(factorial(m) / (factorial(n) * factorial(m-n))))
고수의 풀이
import math
for l in[*open(0)][1:]:print(math.comb(*map(int,l.split()[::-1])))
CODE REVIEW
- 
itertools의combinations을 이용하면 편리하지만 숫자가 커지면 뻗어버린다.- 알고리즘에서는 combinations 직접 구현하자!
- 아무래도 경우의 수를 모두 보여준 뒤에 len()으로 길이를 추출해내기 때문에 그런듯.
- 경우의 수만 구해야한다면 굳이 이 과정을 거칠 이유가 없다.
 
- 따라서 combination 조합의 정의에 따라 factorial을 구현해서 풀어내었다.
- 경우의 수만 구하는 경우 math라이브러리를 import해서math.comb을 이요하자.