Algorithm/백준
[백준] 15655번 N과 M (6)
sirius
2021. 3. 3. 09:50
https://www.acmicpc.net/problem/15655
15655번: N과 M (6)
N개의 자연수와 자연수 M이 주어졌을 때, 아래 조건을 만족하는 길이가 M인 수열을 모두 구하는 프로그램을 작성하시오. N개의 자연수는 모두 다른 수이다. N개의 자연수 중에서 M개를 고른 수열
www.acmicpc.net
start 를 i + 1로 하여 중복이 발생하지 않게 함
import java.util.*;
import java.io.*;
public class Main {
public static int N, M;
public static int[] ans;
public static int[] arr;
public static boolean[] visit;
public static StringBuffer sb = new StringBuffer();
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
N = Integer.parseInt(st.nextToken()); // 자연수 개수
M = Integer.parseInt(st.nextToken()); // 자연수
ans = new int[M];
arr = new int[N];
visit = new boolean[N];
st = new StringTokenizer(br.readLine());
for (int i = 0; i < N; i++) {
arr[i] = Integer.parseInt(st.nextToken());
}
Arrays.sort(arr);
dfs(0, 0);
System.out.println(sb);
}
private static void dfs(int start, int depth) {
if(depth == M) {
for(int val : ans) {
sb.append(val).append(" ");
}
sb.append("\n");
return;
}
for(int i = start ; i < N; i ++) {
if(!visit[i]) {
visit[i] = true;
ans[depth] = arr[i];
dfs(i + 1, depth + 1);
visit[i] = false;
}
}
}
}