📝문제 설명
📢입출력 예시
✏️문제 풀이
이 문제 또한 예제 2번의 출력을 보며 규칙을 이해해보자.
(1,2)와 (2,1)은 같은 경우로 취급하여 출력을 안한다.
똑같이 (2,4)은 (4,2)와 같은 경우로 취급하여 출력을 안한다.
이제 그림으로 이해해보자
그림을 잘 보면 depth 0일 때의 재귀함수에서 depth 1로 넘어갈 때
십의자리수의 값에서 +1 한만큼 일의자리수에 넣어주는 것을 볼 수 있다.
이러면 다음 재귀함수로 넘어갈 때 십의 자리수에 채워진 어떤 변수 값을 depth 1로 +1만큼 더하고 가져가야 한다.
package Baekjoon.BackTracking;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Baek15650 {
static int[] map;
static boolean[] visited;
static int N, M;
static StringBuilder stringBuilder = new StringBuilder();
public static void main(String[] args) throws IOException {
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer stringTokenizer = new StringTokenizer(bufferedReader.readLine());
N = Integer.parseInt(stringTokenizer.nextToken());
M = Integer.parseInt(stringTokenizer.nextToken());
map = new int[M];
visited = new boolean[N];
backTracking(0,0);
System.out.println(stringBuilder);
}
public static void backTracking(int num, int depth){
if(depth == M){
for(int n : map){
stringBuilder.append(n).append(' ');
}
stringBuilder.append('\n');
return;
}
for(int i=num; i<N; i++){
if(!visited[i]){
map[depth] = i+1;
visited[i] = true;
backTracking(i+1, depth+1);
visited[i] = false;
}
}
}
}
💡새로 알게된 점
이게 텍스트로 설명하려니깐 많이 부족하네요...
'📖Algorithm > BackTracking' 카테고리의 다른 글
JAVA [Algorithm] - 백준 14888 연산자 끼워 넣기 (0) | 2025.01.08 |
---|---|
JAVA [Algorithm] - 백준 14889 스타트와 링크 (0) | 2025.01.08 |
JAVA [Algorithm] - 백준 9663 N-Queen (0) | 2025.01.07 |
JAVA [Algorithm] - 백준 15649 N과 M (1) (0) | 2025.01.06 |