문제는 다음과 같다.
https://www.acmicpc.net/problem/15654
풀이는 다음과 같다.
import java.io.*;
import java.util.*;
public class Main {
static boolean[] visited;
static int[] arr;
static int n,m;
static BufferedWriter bw;
static int[] answer;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
bw = new BufferedWriter(new OutputStreamWriter(System.out));
//nPm 백트래킹 문제
StringTokenizer st1 = new StringTokenizer(br.readLine());
n = Integer.parseInt(st1.nextToken());
m = Integer.parseInt(st1.nextToken());
arr = new int[n];
visited = new boolean[n];
answer = new int[m];
StringTokenizer st2 = new StringTokenizer(br.readLine());
for(int i = 0 ; i < n ; i++) {
arr[i] = Integer.parseInt(st2.nextToken());
}
Arrays.sort(arr);
backTracking(0);
bw.flush();
bw.close();
}
static void backTracking(int depth) throws IOException{
if(depth == m) {
for(int i = 0 ; i < m ; i++) {
bw.write(String.valueOf(answer[i]));
if(i != m-1) bw.write(" ");
}
bw.write("\n");
return;
}
for(int i = 0 ; i < n ; i++) {
if(visited[i]) continue;
visited[i] = true;
answer[depth] = arr[i];
backTracking(depth+1);
visited[i] = false;
}
}
}
흔한 백트래킹 문제이다.