문제 바로가기 : 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탄과 비슷하다.
'Algorithm' 카테고리의 다른 글
[Algo] 백준 12015 가장 긴 증가하는 부분 수열 2 JAVA (0) | 2024.05.08 |
---|---|
[Algo] 백준 15651 N과 M (3) JAVA (0) | 2024.05.08 |
[Algo] 백준 1937 욕심쟁이 판다 JAVA (0) | 2024.05.08 |
[Algo] 백준 15650 N과 M(2) JAVA (0) | 2024.05.08 |
[Algo] 백준 15683 감시 JAVA (0) | 2024.05.08 |