알고리즘/코테
순열연습, 조합연습 (알고리즘 JAVA)
컵라면만두세트
2022. 5. 12. 20:54
순열
서로 다른 n개에서 r개를 뽑아서 정렬하는 경우의 수
package 백트래킹;
public class 순열연습 {
public static void main(String[] args) {
int arr[] = {1,2,3,4};
int r = 2;
backtracking(arr,new int[r],new boolean[arr.length], 0, 0, r);
}
static void backtracking(int arr[],int[] out, boolean check[], int depth, int start, int r){
if(depth == r){
for(int num : out) System.out.print(num + " ");
System.out.println();
return;
}
// 1,2 2,1 다른 경우의 수이니까
for(int i=0; i<arr.length; i++){
if(!check[i]){
check[i] = true;
out[depth] = arr[i];
backtracking(arr,out,check,depth+1, start+1, r);
check[i] = false;
}
}
}
}
조합
서로 다른 n개에서 순서 없이 r개를 뽑는 경우의 수
package 백트래킹;
public class 조합연습 {
public static void main(String[] args) {
int arr[] = {1,2,3,4,5,6};
int r = 2;
// 2개를 뽑자
boolean check[];
backtracking(arr,new boolean[arr.length],0,0,r);
}
static void backtracking(int arr[], boolean check[], int start, int depth,int r){
if(depth == r){
for(int i=0; i<arr.length; i++){
if(check[i]) System.out.print(arr[i]+ " ");
}
System.out.println();
return;
}
for(int i=start; i<arr.length; i++){
if(!check[i]){
check[i] = true;
backtracking(arr,check,i+1,depth+1,r);
check[i] = false;
}
}
}
}