10이하의 N개의 자연수가 주어지면 이 중 M개를 뽑아 일렬로 나열하는 방법을 모두 출력
입력
3 2
3 6 9
출력
3 6
3 9
6 3
6 9
9 3
9 6
앞에 중복순열 뽑는것과 비슷하지만 ch배열을 이용해서 이미 사용한 것은 사용하지 않게 해준다
import java.util.*;
public class Main{
static int n, m;
static int[] arr, ch, res;
public void dfs(int L) {
if(L == m){
for (int x : res) System.out.print(x + " ");
System.out.println();
}
else {
for (int i =0; i < n; i++){
if (ch[i] == 0){
ch[i] = 1;
res[L] = arr[i];
dfs(L+1);
ch[i] = 0;
}
}
}
}
public static void main(String args[]) {
Main T = new Main();
Scanner in = new Scanner(System.in);
n = in.nextInt();
m = in.nextInt();
arr = new int[n];
ch = new int[n];
res = new int[m];
for(int i = 0; i < n; i++) arr[i] = in.nextInt();
T.dfs(0);
}
}
'알고리즘 이전 > 재귀, DFS, BFS, Tree, Graph' 카테고리의 다른 글
조합 구하기 (0) | 2023.08.25 |
---|---|
수열 추측하기 (0) | 2023.08.25 |
조합 구하기(메모리제이션) (0) | 2023.08.24 |
동전 교환 (0) | 2023.08.24 |
DFS 중복순열 (0) | 2023.08.24 |