순열
import java.util.Arrays;
public class PermutationTest {
static int[] numbers;
static int N = 4;
static boolean[] isSelected;
public static void main(String[] args) {
numbers = new int[N];
isSelected = new boolean[N + 1];
permutation(0);
}
static void permutation(int cnt) {
if (cnt == N) {
System.out.println(Arrays.toString(numbers));
return;
}
for (int i = 1; i <= N; i++) {
if (isSelected[i]) continue;
numbers[cnt] = i;
isSelected[i] = true;
permutation(cnt + 1);
isSelected[i] = false;
}
}
}
조합
import java.util.Arrays;
public class CombinationTest {
static int[] numbers;
static int N = 4, R = 2;
public static void main(String[] args) {
numbers = new int[R];
combination(0, 1);
}
static void combination(int cnt, int start) {
if (cnt == R) {
System.out.println(Arrays.toString(numbers));
return;
}
for (int i = start; i <= N; i++) {
numbers[cnt] = i;
combination(cnt + 1, i + 1);
}
}
}
부분집합
import java.util.Scanner;
public class S1_SubSetTest {
static int N, totalCnt;
static int[] input;
static boolean[] isSelected;
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
N = sc.nextInt();
input = new int[N];
isSelected = new boolean[N];
for(int i = 0; i < N; i++) {
input[i] = sc.nextInt();
}
generateSubset(0);
System.out.println("총 경우의 수: " + totalCnt);
}
private static void generateSubset(int cnt) {
if (cnt == N) {
totalCnt++;
for (int i = 0; i < N; i++) {
System.out.print((isSelected[i] ? input[i] : "X") + "\t");
}
System.out.println();
return;
}
isSelected[cnt] = true;
generateSubset(cnt + 1);
isSelected[cnt] = false;
generateSubset(cnt + 1);
}
}