
1부터 N까지의 자연수를 M개인 수열로 출력하라
수열에서 숫자는 중복될 수 없다.
오름차순으로 수열으로 출력한다.


public static int[] arr; // 수열을 정렬할 배열
public static boolean[] visit; // 중복이 되지않게 하기 위해 선언한 boolean형 배열
public static int N,M;
public static StringBuilder str = new StringBuilder();
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer strT = new StringTokenizer(br.readLine()," ");
N = Integer.parseInt(strT.nextToken());
M = Integer.parseInt(strT.nextToken());
arr = new int[M]; // M개의 숫자 만큼 배열을 만든다.
visit = new boolean[N]; // 자연수의 수만큼 배열을 만들어 해당 숫자가 사용되었는지 확인할 수 있도록 한다.
dfs(N,M,0);
System.out.println(str);
}
public static void dfs(int range,int selete,int num){
if(num == M){ //수열을 수가 같다면
for(int i:arr){ // 배열의 전체를
str.append(i).append(' '); // str에 담아준다 그 사이에 공백을 추가해준다.
}
str.append('\n');
return;
}
for(int i=0;i<N;i++){
if(!visit[i]){ //자연수가 사용한 것이 사용하지않았다면
visit[i] = true; //사용전 true로 바꿔주고 난후
arr[num] = i + 1; // 해당값을 arr배열에 넣어준다.
dfs(range,selete,num + 1); // 그후 재귀호출을 진행한다.
visit[i] = false; //해당 재귀호출이 끝났다면 다시 false로 바꿔저 초기화 해준다.
}
}
}
}