문제 출처: https://www.acmicpc.net/problem/15649
문제
자연수 N과 M이 주어졌을 때, 아래 조건을 만족하는 길이가 M인 수열을 모두 구하는 프로그램을 작성하시오.
import java.util.Scanner;
public class Main {
private static StringBuilder result = new StringBuilder();
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int N = scanner.nextInt();
int M = scanner.nextInt();
int[] nums = new int[N]; // 1 2 3
boolean[] check = new boolean[N]; // false false false
for (int i = 0; i < N; i++) {
nums[i] = i + 1;
}
permutation(nums, check, 0, M, new StringBuilder());
System.out.println(result);
}
private static void permutation(int[] nums, boolean[] check, int count, int M, StringBuilder sb) {
if (count == M) {
result.append(sb).append("\n");
return;
}
for (int i = 0; i < nums.length; i++) {
if (!check[i]) {
check[i] = true; // 1을 뽑음
sb.append(nums[i]).append(" ");
permutation(nums, check, count + 1, M, sb);
sb.setLength(sb.length() - 2);
check[i] = false;
}
}
}
}