공부/ALGORITHM

부분집합

5월._. 2022. 4. 8.
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

 

'공부 > ALGORITHM' 카테고리의 다른 글

조합과 중복조합  (0) 2022.02.20
순열과 중복순열  (0) 2022.02.20

댓글