머쓱이는 구슬을 친구들에게 나누어주려고 합니다. 구슬은 모두 다르게 생겼습니다. 머쓱이가 갖고 있는 구슬의 개수 balls와 친구들에게 나누어 줄 구슬 개수 share이 매개변수로 주어질 때, balls개의 구슬 중 share개의 구슬을 고르는 가능한 모든 경우의 수를 return 하는 solution 함수를 완성해주세요.
이 문제를 풀기 위해 팩토리얼 개념이 필요하다.
팩토리얼은 n!
로 표현하며 1부터 n까지 모든 수의 곱을 말하며 팩토리얼을 구현하기 위해 재귀함수, for문, math 모듈을 사용할 수 있다.
나는 이 문제를 풀 때 실제 확률과 통계에서 내가 수학 문제를 풀었던 방법으로 코드를 작성했다.
def solution(balls, share):
numer, denom = 1, 1
for i in range(share):
numer *= balls - i
denom *= i + 1
answer = int(numer / denom)
return answer
다른 사람의 풀이를 봤을 때 다양한 방법들이 존재했다.
math
모듈의 comb(n, k)
함수 사용import math
def solution(balls, share):
return math.comb(balls, share)
``
math
모듈의 factorial(x)
함수 사용팩토리얼을 구해주는 factorial() 함수를 사용해 정석 수학 공식으로 경우의 수를 구한다.
import math
def solution(balls, share):
return math.factorial(balls)/(math.factorial(balls-share)*math.factorial(share))
math
모듈을 사용하지 않고 for문으로 factorial을 구현해 위의 공식을 사용한다.