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번은 이걸로 못 풀었다ㅠㅠ 확실히 재귀함수는 공간복잡도가 크긴 큰가보다.