백준 1010번 바로가기
첫 번째 풀이#
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
을 이요하자.