1. 순열 (Permutation)

“반복문을 통한 순열 구현”

private static void permutation() {
	for(int i=1; i<=3; i++) {
		for(int j=1; j<=3; j++) {
			if(j != i){
				for(int k=1; k<=3; k++) {
					if(k != i && k != j)
						System.out.println(i + " " + j + " " + k);
				}
			}
		}
	}
}

“재귀를 통한 순열 구현”

static int N = 3;
static int[] numbers = new int[N];
static boolean[] isSelected = new boolean[N];

public static void permutation(int cnt) {
	
	if(cnt == N){
		for(int i=0; i<N; i++)
			System.out.print(numbers[i] + " ");
		System.out.println();
		return;
	}

	for(int i=0; i<N; i++) {
		if(!selected[i]){
			selected[i] = true;
			numbers[cnt] = cnt + 1;
			permutation(i+1);
			selected[i] = false;
		}
	}	
}
static int N = 3;
static int[] numbers= new int[N];
static boolean[] isSelected = new boolean[N];

public static void permutation(int cnt) {

	if(cnt == N) {
		for(int i=0; i<N; i++)
			System.out.print(numbers[i] + " ");
		System.out.println();
		return;
	}

	for(int i=0; i<N; i++) {
		numbers[i] = i+1;
		permutation(cnt+1);
	}
}

2. 조합 (Combination)