백준 15649번: N과 M[JAVA]
https://www.acmicpc.net/problem/15649
[정답 코드]
import java.io.*;
import java.util.*;
public class Main {
static int N, M;
static int[] arr;
static boolean[] visit;
static StringBuilder sb = new StringBuilder();
public static void main(String[] args) throws Exception {
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
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[M];
visit = new boolean[N]; // 기본값 모두 false
dfs(0);
System.out.println(sb);
br.close();
}
public static void dfs(int depth) {
if (depth == M) {
//depth 가 M까지 도착하면 sb에 집어넣고 return
for (int i : arr) {
sb.append(i).append(" ");
}
sb.append("\n");
return;
}
for (int i = 0; i < N; i++) {
if (!visit[i]) {
visit[i] = true; // 방문한 노드는 true
arr[depth] = i + 1;
dfs(depth + 1);
visit[i] = false; // 탐색이 모두 끝나면 모두 false 로 변경
}
}
}
}
[설명]
위 그림을 보면 이해하기가 쉽다.
입력값으로 3 3 을 입력받아 자연수 1부터 3(N) 까지의 수를 3(M)개 고른것이다.
M개를 골라야하기 때문에 배열 int[M] 을 선언한 후 DFS를 하며 찾아가는것이다.
'코딩테스트' 카테고리의 다른 글
백준 1759번: 암호 만들기[JAVA] (0) | 2023.11.21 |
---|---|
백준 1699번: 제곱수의 합[JAVA] (0) | 2023.11.16 |
백준 9663번: N-Queen[JAVA] (0) | 2023.11.10 |
백준 7576번: 토마토[JAVA] (1) | 2023.11.03 |
백준 11724번: 연결 요소의 개수[JAVA] (1) | 2023.11.03 |