728x90

부분집합
집합에서 원소를 선택하는 것이다.
idx는 뽑으려고 하는 수의 인덱스다. 인덱스가 총 뽑을 수 있는 수의 개수(N)와 동일하면 끝난다.
isSelected는 뽑은 수를 저장하는 배열이다. 이 코드에서는 값 없이 뽑은 수의 인덱스만 저장했다.
공집합, 모든 원소를 포함하는 집합도 포함한다.
private static void subSet(int idx){ if(idx==N){ for(int i=0;i<N;i++){ System.out.println((isSelected[i]?input[i]:"X")+" "); } System.out.println(); return; } isSelected[idx] = true; subSet(idx+1); isSelected[idx] = false; subSet(idx+1); }
관련 문제
1182번: 부분수열의 합
첫째 줄에 정수의 개수를 나타내는 N과 정수 S가 주어진다. (1 ≤ N ≤ 20, |S| ≤ 1,000,000) 둘째 줄에 N개의 정수가 빈 칸을 사이에 두고 주어진다. 주어지는 정수의 절댓값은 100,000을 넘지 않는다....
www.acmicpc.net
댓글