728x90
https://www.acmicpc.net/problem/15654
풀이
길이가 M인 수열을 출력해주면 되는데, 같은 숫자가 2번이상 들어가면 안된다.
수열은 사전순으로 증가하는 순서로 출력해야한다.
Arrays.sort로 정렬해준 다음 dfs를 사용해서 풀어줬는데,
그냥 처음 배열에서 순열을 뽑은 다음 PriorityQueue 사용해서 정렬해줘도 될 것 같다 !
전체코드
package 백준renew;
import java.io.*;
import java.util.*;
public class 실버3_N과M_5 {
static int N, M;
static int tmp[];
static int arr[];
static boolean visited[];
static StringBuilder sb = new StringBuilder();
public static void main(String[] args) throws Exception{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringTokenizer st = new StringTokenizer(br.readLine());
N = Integer.parseInt(st.nextToken());
M = Integer.parseInt(st.nextToken());
visited = new boolean[N];
arr = new int[N];
st = new StringTokenizer(br.readLine());
for(int i=0; i<N; i++) {
arr[i] = Integer.parseInt(st.nextToken());
}
tmp = new int[M];
Arrays.sort(arr);
Col(0);
bw.write(sb.toString());
bw.close();
}
public static void Col( int cnt) {
if(cnt == M) {
for(int i=0; i<tmp.length; i++) {
sb.append(tmp[i]).append(" ");
}
sb.append('\n');
return;
}
for(int i=0; i<N; i++) {
if(!visited[i]) {
tmp[cnt] = arr[i];
visited[i] = true;
Col(cnt+1);
visited[i] = false;
}
}
}
}
728x90
'코테 > Algorithm' 카테고리의 다른 글
[Programmers] 더 맵게 (JAVA) (0) | 2024.06.18 |
---|---|
[BOJ] 15655: N과 M(6) (JAVA) (0) | 2024.06.17 |
[Programmers] 두 큐 합 같게 만들기 (Java) (0) | 2024.06.14 |
[BOJ] 15651: N과 M (3) (JAVA) (0) | 2024.06.09 |
[Programmers] 점프와 순간 이동 (JAVA) (0) | 2024.06.07 |