수열이 주어지고 크기가 주어질때 가능한 조합의 수를 전부 출력하는 문제입니다.
DFS를 사용해서 모든 경우의 수를 확인해주었습니다.
출력이 많아서 Java에서 시간초과가 발생하여 BufferedWriter를 사용해주었습니다.
import java.io.*;
import java.util.Scanner;
public class Main {
public static int[] arr;
public static boolean[] visit;
public static int n;
public static int m;
public static BufferedWriter bf;
public static void main(String argc[]) throws IOException{
bf = new BufferedWriter(new OutputStreamWriter(System.out));
Scanner sc = new Scanner(System.in);
n = sc.nextInt();
m = sc.nextInt();
arr = new int[m];
visit = new boolean[n];
for(int i=0; i<n; ++i){
DFS(i, 0);
}
bf.close();
}
public static void DFS(int num, int cnt) throws IOException{
visit[num] = true;
arr[cnt] = num + 1;
if(m == cnt+1){
for(int i=0; i<m; ++i) {
bf.write(arr[i] + " ");
}
bf.write("\n");
visit[num] = false;
return;
}
for(int i=0; i<n; ++i){
if(!visit[i]){
DFS(i, cnt+1);
}
}
visit[num] = false;
}
}
'알고리즘' 카테고리의 다른 글
[Java] 백준 6603번 로또 (0) | 2023.01.24 |
---|---|
[Java] 백준 15650번 N과 M (2) (0) | 2023.01.23 |
[Java] 백준 1260번 DFS와 BFS (0) | 2023.01.23 |
[Java] 백준 10845번 큐 (0) | 2023.01.23 |
[Java] 백준 14891번 톱니바퀴 (1) | 2023.01.20 |