Algorithm
[Algo] 백준 15654 N과 M (5) JAVA
조핑구
2024. 5. 8. 13:54
문제 바로가기 : https://www.acmicpc.net/problem/15654
메모리 : 28436KB
시간 : 380ms
언어 : Java 11
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;
public class Main {
static int N, M;
static int[] arr;
static int[] ans;
static boolean[] check;
static StringBuilder sb = new StringBuilder();
public static <T> void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
N = Integer.parseInt(st.nextToken());
M = Integer.parseInt(st.nextToken());
arr = new int[N];
st = new StringTokenizer(br.readLine());
for (int i = 0; i < N; i++) {
arr[i] = Integer.parseInt(st.nextToken());
}
Arrays.sort(arr);
ans = new int[M];
check = new boolean[N];
dfs(0, 0);
System.out.print(sb);
}
private static void dfs(int idx, int cnt) {
if (cnt == M) {
for (int i = 0; i < M; i++) {
sb.append(ans[i]).append(" ");
}
sb.append("\n");
return;
}
if (idx >= N) {
return;
}
for (int i = 0; i < N; i++) {
if (!check[i]) {
check[i] = true;
ans[cnt] = arr[i];
dfs(idx + 1, cnt + 1);
check[i] = false;
}
}
}
}
N과 M 5탄 오름차순으로 출력해야하기 때문에 조합을 만들 숫자를 일단 정렬해줬다. 그 외에는 2탄과 비슷하다.