algorithm

부분집합

코드와이 2021. 2. 5. 10:50

 

 부분집합 1 

1, 2, 3 을 갖고 만든 부분 집합으로 재귀를 사용.

[1, 2, 3], [1, 2], [1, 3], [1], [2, 3], [2], [3], [] 을 출력.

package week0201_0205;

public class 부분집합 {
	
	static boolean[] isSelected = new boolean[3];
	static int[] arr = {1,2,3};
	
	public static void main(String[] args) {
		
		func(0);
		
	}
	
	public static void func(int idx) {
		
		if(idx == 3) {
			for(int i = 0 ; i < 3 ; i++) {
				if(isSelected[i]) {
					System.out.print(arr[i]+ " ");
				}
			}
			System.out.println();
			return; 
		}
		
		isSelected[idx] = true;
		func(idx+1);
		isSelected[idx] = false;
		func(idx+1);
	}
}

<실행결과>

 부분집합 2 

1, 2, 3 을 갖고 만든 부분 집합으로 bit 이동으로 비교.

[], [1], [2], [1, 2], [3], [1, 3], [2, 3], [1, 2, 3] 을 출력.

package week0201_0205;

public class 부분집합2 {
	
	public static void main(String[] args) {
		int[] arr = {1,2,3};
		
		for(int i = 0 ; i < 8 ; i++) {
			
			for(int j = 0 ; j < 3 ; j++) {
				if((i & (1 << j)) > 0) {
					System.out.print(arr[j]);
				}
			}
			System.out.println();
		}
	}
}

<실행결과>