유블로그

[알고리즘] 재귀 - 순열 본문

알고리즘

[알고리즘] 재귀 - 순열

yujeong kang 2020. 7. 29. 01:01
import java.util.Arrays;
import java.util.Scanner;

// 입력받은 N개의 숫자 중 R개를 선택하는 순열
public class PermutationInputTest {
	private static int N = 3, R = 2;	// N: 총 숫자 개수, R: 뽑을 숫자 개수
	private static int[] numbers;	// 순열 저장 배열
	private static int[] input;		// 입력된 숫자 배열
	private static boolean[] isSelected;
	
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		N = sc.nextInt();
		R = sc.nextInt();
		
		numbers = new int[R];	// 0으로 초기화
		isSelected = new boolean[N];	// false로 초기화
		input = new int[N];
		
		for(int i = 0; i < N; i++) {
			input[i] = sc.nextInt();
		}
		
		permutation(0);
		
	}
	
	// 지정된 자리에 순열 뽑기
	private static void permutation(int cnt) {	//cnt : 현재까지 뽑은 순열 수의 개수
		if(cnt == R) {
			System.out.println(Arrays.toString(numbers));
			return;
		}
		
		for(int i = 0; i < N; i++) {
			// 중복확인
			if(isSelected[i] == true) continue;
			
			numbers[cnt] = input[i];
			isSelected[i] = true;
			
			permutation(cnt+1);
			
			isSelected[i] = false;
		}
		
	}

}