알고리즘
[백준 15664 JAVA] N과M (10)
begong
2024. 4. 9. 12:33
반응형
백트래킹 문제
입력을 오름차순으로 정렬하고 전 단계에서 방문한 노드가 현재 노드와 같은지 확인을 한다(중복 방지를 위해)
만약 같으면 그 단계는 건너뛰고 아닐 경우 진행하면 된다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;
class Main {
static int N, M;
static int[] arr;
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);
int[] answer = new int[M];
search(0, 0, answer);
}
static public void search(int depth, int idx, int[] answer) {
if (depth == M) {
StringBuilder sb = new StringBuilder();
for (int i : answer) {
sb.append(i).append(" ");
}
System.out.println(sb);
return;
}
int before = -1;
for (int i = idx; i < N; i++) {
if (arr[i] == before) {
continue;
}
answer[depth] = arr[i];
search(depth + 1, i + 1, answer);
before = arr[i];
}
}
}
반응형