N명의 서로 다른 물건을 M개 그룹으로 묶는 경우의 수는 제2종 스털링 수와 같습니다. 영어 위키백과 링크
나무위키에도 문서가 있긴 한데 설명이 그다지 친절하지 않네요...
코드로는 점화식을 이용해 구현할 수 있습니다.
- N=M이거나 M=1일 때에는 1가지
- N>0이고 M=0일 때에는 0가지
- N=a+1, M=b일 때, 마지막 물건이 나머지 물건과 다른 그룹에 속하는 경우 (N=a, M=b-1일 때 경우의 수) + 나머지 물건들의 그룹 b개 중 어느 한 그룹에 속하는 경우 (b * (N=a, M=b일 때 경우의 수))
DP 쓰면 시간복잡도 O(NM)에 공간복잡도는 O(M) (naive하게 구현하면 O(NM))일 것 같네요
zaza1994 2년 전
안녕하세요.
오랜만에 백준에 와서 문의를 드립니다.
N명의 사람을 M개의 팀으로 나누는 경우의 수에 대해서 어떻게 구할 수 있을까요?
전문가분들의 답변 요청드립니다.
감사합니다.