유블로그

[알고리즘] 재귀 - 조합 본문

알고리즘

[알고리즘] 재귀 - 조합

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

public class CombinationTest {
	private static int N = 3, R = 2;	// N: 총 숫자 개수, R: 뽑을 숫자 개수
	private static int[] numbers;	// 조합 저장 배열
	private static int[] input;		// 입력된 숫자 배열
	
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		N = sc.nextInt();
		R = sc.nextInt();
		
		numbers = new int[R];	// 0으로 초기화
		input = new int[N];
		
		for(int i = 0; i < N; i++) 
			input[i] = sc.nextInt();
		
		combination(0, 0);
	}
	
	// 지정된 자리에 조합 뽑기
	private static void combination(int cnt, int start) {	
		//cnt: 현재까지 뽑은 조합의 개수, start: 조합에 시도할 원소 시작점
		if(cnt == R) {
			System.out.println(Arrays.toString(numbers));
			return;
		}
		// 앞선 수의 선택 다음부터 시도
		for(int i = start; i < N; i++) {
			numbers[cnt] = input[i];
			combination(cnt+1, i+1);
		}
		
	}
}