본문 바로가기

알고리즘/개념

Permutation & Combination

반응형
import java.util.Arrays;

public class Permutation {
	static int[] arr = {1,2,3};
	public static void main(String[] args) {
		perm(arr.length,0);
	}
	static void perm(int n, int k) {
		if(k == n) {
			System.out.println(Arrays.toString(arr));
			return;
		} 
		
		for(int i = k; i < arr.length; i++) {
			swap(k,i);
			perm(n,k+1);
			swap(k,i);
		}
	}
	
	static void swap(int i, int j) {
		int tmp = arr[i];
		arr[i] = arr[j];
		arr[j] = tmp;
	}
}
import java.util.Arrays;

public class Permutation {
	static int[] arr = {1,2,3};
	public static void main(String[] args) {
		comb(arr.length,0,3);
	}
	
	static boolean[] visited = new boolean[arr.length];
	static void comb(int n, int k, int r) {
		if(r == 0) {
			for(int i = 0; i < arr.length; i++)
				if(visited[i])
					System.out.print(arr[i]+" ");
			System.out.println();
			return;
		}
		
		for(int i = k; i < n; i++) {
			visited[i] = true;
			comb(n,i+1,r-1);
			visited[i] = false;
		}
		
	}
	
	static void swap(int i, int j) {
		int tmp = arr[i];
		arr[i] = arr[j];
		arr[j] = tmp;
	}
}

아직은 이렇게 짜는 순열과 조합이 이해가 안된다. 코드가 간단해서 이렇게 써놓았지만 나중에는 이해하고 쓰도록 해야지.

'알고리즘 > 개념' 카테고리의 다른 글

투 포인터  (0) 2020.05.03
구간 트리(세그먼트 트리)  (0) 2020.04.18
다익스트라,벨만포드,플로이드 워샬  (0) 2020.04.16
DISJOINT-SETS, MST  (0) 2020.02.14