본문 바로가기
언어/JAVA

java 순열, 중복 순열, 조합, 중복 조합

by 김어찐 2021. 8. 3.
728x90


import java.util.Arrays;
import java.util.Scanner;

import com.sun.xml.internal.bind.v2.runtime.unmarshaller.XsiNilLoader.Array;

public class DiceTest {
	static int N,numbers[],totalCnt;
	static boolean[] isSelected;
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		N= sc.nextInt();
		int M=sc.nextInt();
		numbers = new int[N];
		totalCnt = 0;
		switch(M)
		{
		case 1 : // 중복순열
			dice1(0);
			break;
			
		case 2: //순열
			isSelected = new boolean[7];
			dice2(0);
			
			break;
		case 3: // 중복 조합
			dice3(0,1);
			break;
		case 4: // 조합
			dice4(0,1);
			
			break;
		}
		System.out.println("경우의 수 : "+totalCnt);
	}
	// 중복  순열
	private static void dice1(int cnt)
	{
		if(cnt==N)
		{
			totalCnt++;
			System.out.println(Arrays.toString(numbers));
			return;
		}
		
		for(int i = 1;i<=6;i++)
		{
			
			
			numbers[cnt]=i;
			
			dice1(cnt+1);
			
			
			
		}
	}
	// 순열
	private static void dice2(int cnt)
	{
		if(cnt==N)
		{
			totalCnt++;
			System.out.println(Arrays.toString(numbers));
			return;
		}
		
		for(int i = 1;i<=6;i++)
		{
			if(isSelected[i]) continue;
			
			numbers[cnt]=i;
			isSelected[i]=true;
			dice2(cnt+1);
			isSelected[i]=false;
			
			
		}
	}
	// 중복 조합
	private static void dice3(int cnt,int start)
	{
		if(cnt==N)
		{
			totalCnt++;
			System.out.println(Arrays.toString(numbers));
			return;
		}
		for(int i = start;i<=6;i++)
		{
			numbers[cnt]=i;
			dice3(cnt+1,i);
		}
	}
	
	// 조합
	private static void dice4(int cnt,int start)
	{
		if(cnt==N)
		{
			totalCnt++;
			System.out.println(Arrays.toString(numbers));
			return;
		}
		for(int i = start;i<=6;i++)
		{
			numbers[cnt]=i;
			dice4(cnt+1,i+1);
		}
	}
}
728x90

'언어 > JAVA' 카테고리의 다른 글

자바 sort (Compareable, Comparator, lambda)  (0) 2021.08.06
자바 조합 생성  (0) 2021.08.03
StringBuilder  (0) 2021.08.02
BufferedReader  (1) 2021.08.02
java input.txt 읽기  (0) 2021.07.29