문제
https://www.acmicpc.net/problem/15649
풀이(13분)
import java.io.*;
import java.util.*;
public class Main{
static int n;
static int m;
static boolean[] visited;
static StringBuilder sb = new StringBuilder();
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
st = new StringTokenizer(br.readLine());
n = Integer.parseInt(st.nextToken());
m = Integer.parseInt(st.nextToken());
visited = new boolean[n+1];
visited[0] = true;
for(int i = 1; i < n + 1; i ++){
dfs(i,1);
}
}
public static void dfs(int num, int depth){
if(depth == m){
sb.append(num + " ");
System.out.println(sb);
sb.delete(sb.length() - 2, sb.length());
return;
}
visited[num] = true;
sb.append(num + " ");
for(int i = 1; i < n+1; i++){
if(!visited[i]){
dfs(i, depth+1);
visited[i] = false;
}
}
visited[num] = false;
sb.delete(sb.length() - 2, sb.length());
}
}
dfs를 이용하여 원하는 조합의 수만큼 개수를 측정했다면 출력을하게 하는 간단한 백트레킹 문제이다.
중요한 부분은 StringBuilder을 이용하여 출력하기 때문에 양식을 정확히 맞추는 것.
또한, 백트레킹을 위해 적절한 부분에서 false로 재설정 해주는 것이다.
'문제 풀이 > 백준' 카테고리의 다른 글
| [백준] 1024번. 수열의 합(JAVA) (0) | 2025.01.09 |
|---|---|
| [백준] 1051번. 숫자 정사각형(JAVA) (0) | 2025.01.07 |
| [백준] 2606번. 바이러스(JAVA) (1) | 2025.01.03 |
| [백준] 3584번. 가장 가까운 공통 조상(JAVA) (0) | 2025.01.02 |
| [백준] 11725번. 트리의 부모 찾기(JAVA) (0) | 2025.01.02 |