순열과 조합

최혜원·2021년 9월 14일
0

알고리즘

목록 보기
4/4

순열과 중복순열

순열이란, 서로 다른 n개의 값 중에서 r개의 숫자를 모든 순서대로 뽑는 경우를 뜻합니다.

중복순열이란, 임의의 집합을 순서대로 나열하는데 순열과 다르게 집합의 원소를 중복해서 선택할 수가 있습니다.

public class Solution {
	static int COUNT = 0;		// 총 건수(경우의 수)
	static int[] src = {1,2,3,4,5};
	static int[] tgt = new int[3];
	static boolean[] select = new boolean[src.length];
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		perm(0);
		System.out.println(COUNT);
		

	}
    
    // 순열 
	public static void perm(int tgtIdx) {
		// 기저조건
		if(tgtIdx==tgt.length) {
			System.out.println(Arrays.toString(tgt));
			COUNT++;
			return;
		}
		
		for(int i=0; i<src.length; i++) {
			if(select[i])	continue;
			
			tgt[tgtIdx] = src[i];
			select[i] = true;
			perm(tgtIdx+1);
			select[i] = false;
		}
		
	}

	// 중복순열 : nㅠr = n^r
	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);
		}
	}

}

조합과 중복조합

조합이란, 서로 다른 n개의 값 중에서 순서와 상관없아 r개를 뽑는 것 입니다.

// 조합
public class Basic_Comb_RC_FOR {
	static int COUNT;
	static int[] src= {1,2,3,4,5};
	static int[] tgt=new int[3];
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		comb(0,0);
		System.out.println(COUNT);
	}
	
	static void comb(int srcIdx,int tgtIdx) {
		// 기저조건
		if(tgtIdx==tgt.length) {
			System.out.println(Arrays.toString(tgt));
			COUNT++;
			return;
		}
		
		for(int i=srcIdx; i<src.length; i++) {
			tgt[tgtIdx] = src[i];
			comb(i+1,tgtIdx+1);
			
		}
	}

}
//조합
public class Basic_Comb_RC_TWO {
	static int COUNT;
	static int[] src= {1,2,3,4,5};
	static int[] tgt=new int[3];
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		comb(0,0);
		System.out.println(COUNT);
	}
	
	static void comb(int srcIdx,int tgtIdx) {
		// 기저조건
		if(tgtIdx==tgt.length) {
			System.out.println(Arrays.toString(tgt));
			COUNT++;
			return;
		}
		
		//srcIdx 기저조건
		if(srcIdx==src.length) 	return;
		
		tgt[tgtIdx] = src[srcIdx];
		comb(srcIdx+1,tgtIdx+1);
		comb(srcIdx+1,tgtIdx);	// 28 라인을 버리겠다.

		
	}

}
profile
멋쟁이 개발자가 될꺼야

0개의 댓글