효빈이의 비밀 박스에는 조약돌이 N개 들어있다. 조약돌의 색상은 1부터 M까지 중의 하나이다.
비밀 박스에서 조약돌을 랜덤하게 K개 뽑았을 때, 뽑은 조약돌이 모두 같은 색일 확률을 구하는 프로그램을 작성하시오.
combinations()
를 통해 풀었는데 시간초과가 났다.from sys import stdin
from itertools import combinations
m = int(stdin.readline())
arr = list(map(int, stdin.readline().split()))
k = int(stdin.readline())
stones = []
i = 1
for num in arr:
stones.extend([i]*num)
i += 1
total = 0
cnt = 0
for tmp in combinations(stones, k):
if len(set(tmp)) == 1:
cnt += 1
total += 1
print(cnt/total)
from sys import stdin
import math
m = int(stdin.readline())
arr = list(map(int, stdin.readline().split()))
k = int(stdin.readline())
n = sum(arr)
total = math.comb(n, k)
color = 0
for stone in arr:
color += math.comb(stone, k)
print(color/total)
수학으로 풀이를 생각했어야 됬다.