728x90
nPr의 모든 경우를 출력하는 코드이다.
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n = in.nextInt(); //1부터 n까지의 숫자 중에서
int r = in.nextInt(); //r개를 뽑는다
boolean[] visited = new boolean[n];
int[] selected = new int[r];
for (int i = 0; i < n; i++) {
visited[i] = false;
}
permutation(selected, visited, n, r, 0);
}
static void permutation(int[] selected, boolean[] visited, int n, int r, int num) {
if (num == r) {
for (int i = 0; i < r; i++) {
System.out.print(selected[i] + " ");
}
System.out.println();
return;
}
for (int i = 0; i < n; i++) {
if(!visited[i]){
visited[i] = true;
selected[num] = i + 1;
permutation(selected, visited, n, r, num + 1);
visited[i] = false;
}
}
}
}
permutation 함수의 매개변수인 num은 num번째 숫자를 정하는 것이다.
permutation 함수의 for문은 그 num번째 자리에 1부터 n까지의 숫자 중에 어떤 숫자를 넣을지 정하는 것이다.
728x90
'알고리즘' 카테고리의 다른 글
[알고리즘] 플로이드 (Floyd) 알고리즘 (0) | 2020.02.08 |
---|---|
[알고리즘] 조합 (Combination) (0) | 2020.01.06 |