각 원소 , , , 에 대해 포함되었으면 1, 아니면 0으로 나타낸다.
즉 ~ 로 나타낼 수 있다.
따라서 부분집합 는 로 나타낼 수 있다.
int[] arr = new int[] { 3, 6, 7, 1, 5, 4 };
int n = arr.length;
for(int i = 0; i < (1 << n); i++) {
for(int j = 0; j < n; j++) {
if((i & (1 << j)) != 0) { //2^n을 구하는 것
System.out.print(arr[j] + " ");
}
System.out.println();
}
}
boolean[]
이 아닌 int flag
하나만으로도 할 수 있다.long
도 64비트이므로 관리할 수 있는 원소 갯수가 64개로 한정된다는 한계도 있다.long
여러 개 써도 되긴 하는데 그냥 BigInteger
쓰는 게 편하다.boolean[]
하는 게 더 나을 수도 있다.