https://www.acmicpc.net/problem/15650
N과 M이 주어졌을 때M개를 고른 수열 출력조합을 찾는 문제입니다.
private static void dfs(int idx, int start) { // 배열의 인덱스, 시작 번호
if (idx == m) {
for (int i : li) sb.append(i).append(" ");
sb.append("\n");
return;
}
for (int i = start; i <= n; i++) { // 파라미터로 받은 start부터 시작
li[idx] = i; // idx번 인덱스에 i값을 넣어 줍니다.
dfs(idx + 1, i + 1); // 다음 인덱스, i+1번 인덱스부터 시작 재귀
}
}
재귀를 사용해 m개를 찾았다면 출력해 줍니다.
visited 배열은 사용하지 않아도 됩니다.import java.io.*;
import java.util.*;
public class Main {
static StringBuilder sb = new StringBuilder();
static int n, m;
static int[] li;
private static void dfs(int idx, int start) {
if (idx == m) {
for (int i : li) sb.append(i).append(" ");
sb.append("\n");
return;
}
for (int i = start; i <= n; i++) {
li[idx] = i;
dfs(idx + 1, i + 1);
}
}
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());
li = new int[m];
dfs(0, 1);
System.out.println(sb.toString());
}
}