728x90
https://www.acmicpc.net/problem/15663
다른 N과 M 시리즈의 문제 푼 방법에다가 만족하는 수열을 담을 LinkedHashSet을 추가하면 된다!
LinkedHashSet은 순서가 보장되고 중복은 허용하지 않는다.
LinkedHashSet에 만족하는 수열을 넣고, 마지막에 이들을 출력한다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.LinkedHashSet;
import java.util.StringTokenizer;
public class Main {
static int n, m;
static int[] arr;
static boolean[] visited;
static int[] resultArr;
static LinkedHashSet<String> answer;
public static 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);
visited = new boolean[n];
resultArr = new int[m];
answer = new LinkedHashSet<>();
dfs(0, 0);
answer.forEach(System.out::println);
}
static void dfs(int idx, int depth) {
if (depth == m) {
StringBuilder sb = new StringBuilder();
for (int i = 0; i < m; i++) {
sb.append(resultArr[i]).append(" ");
}
answer.add(sb.toString());
return;
}
for (int i = 0; i < n; i++) {
if(!visited[i]) {
visited[i]=true;
resultArr[depth]=arr[i];
dfs(i,depth+1);
visited[i]=false;
}
}
}
}
'Java' 카테고리의 다른 글
[백준 2580] 스도쿠 (JAVA) (0) | 2023.05.03 |
---|---|
[백준 2493] 탑 (JAVA) (0) | 2023.05.02 |
[백준 15657] N과 M(8) (JAVA) (0) | 2023.05.01 |
[백준 15649] N과 M (JAVA) (0) | 2023.05.01 |
[백준 2668] 숫자고르기 (JAVA) (0) | 2023.04.30 |