


N과M 시리즈 그 네번째.
1번 문제를 중심으로 차이점을 설명하므로, 안보신 분들은 그것부터 보자.
15649. N과 M (1) (자바, Java)
백트래킹 알고리즘 첫걸음. 나중에 알았는데, 3대 뉴비절단기로 재귀, 백트래킹, 동적계획법이 있다고 한다. 나도 알고리즘 공부 첫 위기가 재귀 (별찍기+하노이의탑)에서 왔고, 거기를 극복하고
mewtwo.tistory.com
이번엔 1부터 n까지가 아니라, 숫자를 입력값으로 받는다.
그냥 숫자값을 배열로 받아서, i 대신 배열의 i번째값으로 처리해주면 끝.
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;
public class Main {
static int[] arr, nList;
static int n, m;
static boolean[] visit;
static StringBuilder sb = new StringBuilder();
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
n = Integer.parseInt(st.nextToken());
m = Integer.parseInt(st.nextToken());
st = new StringTokenizer(br.readLine(), " ");
nList = new int[n];
visit = new boolean[n];
arr = new int[m];
for (int i=0; i<nList.length; i++) {
nList[i] = Integer.parseInt(st.nextToken());
}
Arrays.sort(nList);
dfs(0);
System.out.println(sb);
}
public static void dfs(int depth) {
if (depth==m) {
for (int i : arr) {
sb.append(i + " ");
}
sb.append("\n");
return;
} else {
for (int i=0; i<n; i++) {
if (!visit[i]) {
visit[i] = true;
arr[depth] = nList[i];
dfs(depth+1);
visit[i] = false;
}
}
}
}
}'백준 문제풀이 > 백트래킹' 카테고리의 다른 글
| 2580. 스도쿠 (자바, Java) (0) | 2023.01.17 |
|---|---|
| 14889. 스타트와 링크 (Java, 자바) (0) | 2023.01.11 |
| 15652. N과 M (4) (자바, Java) (0) | 2022.11.26 |
| 15651 : N과 M (3) (자바, Java) (0) | 2022.11.26 |
| 15650. N과 M (2) (자바, Java) (0) | 2022.11.26 |