조합
1번(추천)
import java.util.Arrays;
public class Combination1 {
static int[] data;
static int[] sel;
static int N, R;
public static void main(String[] args) {
data = new int[] { 10, 11, 12, 13, 14 };
N = 5;
R = 3;
sel = new int[R];
comb(0, 0);
}
static void comb(int idx, int sidx) {
if (sidx == R) {
System.out.println(Arrays.toString(sel));
return;
}
if (idx == N) {
return;
}
sel[sidx] = data[idx];
comb(idx + 1, sidx + 1);
comb(idx + 1, sidx);
}
}
2번
import java.util.Arrays;
public class Combination2 {
static int[] data;
static int[] sel;
static int N, R;
public static void main(String[] args) {
data = new int[] { 10, 11, 12, 13, 14 };
N = 5;
R = 3;
sel = new int[R];
comb(0, 0);
}
static void comb(int idx, int sidx) {
if (sidx == R) {
System.out.println(Arrays.toString(sel));
return;
}
for(int i = idx ; i<=N-R+sidx; i++) {
sel[sidx] = data[idx];
comb(i+1, sidx + 1);
}
}
}
순열
1번(추천)
import java.util.Arrays;
public class Permutation{
static int[] nums;
static boolean[] visited;
static int[] result;
static int N;
public static void main(String[] args) {
N = 3;
nums = new int[] { 0, 1, 2 };
result = new int[N];
visited = new boolean[N];
perm(0);
}
private static void perm(int idx) {
if (idx == N) {
System.out.println(Arrays.toString(result));
return;
}
for (int i = 0; i < N; i++) {
if (visited[i])
continue;
result[idx] = nums[i];
visited[i] = true;
perm(idx + 1);
visited[i] = false;
}
}
}
2번
import java.util.Arrays;
public class Permutation_swap {
static int[] nums;
static int N;
public static void main(String[] args) {
N = 3;
nums = new int[] { 0, 1, 2 };
perm(0);
}
static void swap(int a, int b) {
int tmp = nums[a];
nums[a] = nums[b];
nums[b] = tmp;
}
static void perm(int idx) {
if(idx == N) {
System.out.println(Arrays.toString(nums));
return;
}
for(int i = idx; i<N; i++) {
swap(i, idx);
perm(idx+1);
swap(i, idx);
}
}
}
부분 집합
1번
public class Powerset1 {
public static void main(String[] args) {
for(int i =0; i<(1<<N); i++) {
for(int j = 0; j<N; j++) {
if(i &(1<<j) > 0){
}
}
}
}
}
2번(추천)
public class Powerset2{
public static void main(String[] args){
int[] arr = {1,5,3,6,4};
boolean[] visited = new boolean[5];
int N = 5;
recur(arr, visited, 0);
}
public void recur(int[] arr, boolean[] visited, int idx){
if(idx == N){
for(int i = 0; i < N; i++){
if(visited[i]){
System.out.println(arr[i]);
}
}
return;
}
visited[idx] = true;
recur(arr, visited, idx + 1);
visited[idx] = false;
recur(arr, visited, idx + 1);
}
}