zaza1994   2년 전

안녕하세요. 

오랜만에 백준에 와서 문의를 드립니다.

N명의 사람을 M개의 팀으로 나누는 경우의 수에 대해서 어떻게 구할 수 있을까요?

전문가분들의 답변 요청드립니다.

감사합니다. 

jiminp   2년 전

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))일 것 같네요

댓글을 작성하려면 로그인해야 합니다.