모든 조합 구하기

홍진호·2022년 11월 4일
0
 static void Combi(int su,Stack<int> stack, int idx, ref List<int[]> com)
    {
        for(int i =idx; i < su; i++)
        {
            stack.Push(i);
            com.Add(stack.ToArray());
            Combi(su, stack, i + 1, ref com);
            stack.Pop();
        }
        return com;
    }
  static void Com(int su,Stack<int> stack, int idx, ref List<int[]> com)  
  		{ 
  			Stack<int> stack = new Stack<int>();
            List<int[]> com = new List<int[]>();
            Combi(wear.Length, stack, 0, ref com);
  		}

이번에 백준 9375번 풀면서 찾아보게 된 함수이다.
저런식으로 쓰면 com이라는 List<int[]>안에 모든 경우의 수의 int[]이 담긴다.

기본적인 원리는 0이 첫번째인 스텍 에서 계속 다음 수 붙였다 빼면서 com에 저장하는 것이다.
지금까지 찾은 경우의 수를 돌아보지 않고도 모든 경우를 찾을 수 있어서 굉장히 괜찮다고 생각했는데 결국 메모리 초과나서 9375번은 이걸로 못 풀었다ㅠㅠ 확실히 재귀함수는 공간복잡도가 크긴 큰가보다.

profile
중앙대 예술공학과 홍진호

0개의 댓글