def solution(balls, share):
D = [[0 for j in range(balls + 1)] for i in range(balls + 1)]
for i in range(balls + 1):
D[i][1] = i # i개 중 1개를 뽑는 경우의 수는 1개
D[i][0] = 1 # i개 중 1개도 선택하지 않는 경우의 수는 1개
D[i][i] = 1 # i개 중 i개를 선택하는 경우의 수는 1개
for i in range(2, balls + 1):
for j in range(1, i): # 고르는 수의 개수가 전체 개수를 넘을 수 없음
D[i][j] = D[i - 1][j] + D[i - 1][j - 1] # 조합 기본 점화식
return D[balls][share]
<Do it! 알고리즘 코딩 테스트 파이썬 편> 10장. 조합 - 문제 76번 참고