백트레킹으로 사용한 숫자인지 표시를 해야하는데 문제를 풀다보니 굳이 해야하나? 하는 생각이 들었다
어차피 오름차순의 순열이고 이전의 숫자보다 큰 숫자들 중에서 다음 수를 선택하는거니까
필요 없다는 생각이 들었다.
그래서 그냥 재귀 알고리즘으로 코드를 짰다.
package Baekjoon;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class BOJ15650 {
static int n,m;
static StringBuilder sb = new StringBuilder();
static void dfs(int cur, int cnt, String str){
if(cnt == m) {
sb.append(str).append("\n");
return;
}
if(cur > n) return;
for(int i = cur+1; i <= n; i++){
String curStr = str + " " + i;
dfs(i, cnt+1, curStr);
}
}
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());
for(int i = 1; i <= n+1-m; i++){
dfs(i, 1, String.valueOf(i));
}
System.out.println(sb.toString());
}
}