조합
- For문 사용 ( n이 정해져 있을 때)
public class 조합_for {
public static void main(String[] args) {
int[] arr = {1, 3, 5, 7, 9};
// 5C3 arr의 5개 원소중 임의의 3개 선택
for (int i = 0; i < arr.length - 2; i++)
for (int j = i + 1; j < arr.length - 1; j++)
for (int k = j + 1; k < arr.length; k++)
System.out.println(arr[i] + " " + arr[j] + " " + arr[k]);
}
}
- 재귀사용
import java.util.Arrays;
public class 조합_재귀 {
public static int[] arr = { 1, 3, 5, 7, 9 };
public static int[] trr; // 선택한 원소를 저장할 배열
public static void main(String[] args) {
int n = arr.length;
int r = 3;
trr = new int[r];
comb(n, r);
}
public static void comb(int n, int r) {
if (r == 0) { // 종료파트
System.out.println(Arrays.toString(trr));
} else if (n < r) {
return; // 조합 규칙에 벗어남 nCr! n개중에 r개뽑을때, r이 더 클 수 없음.
} else { // 재귀파트
trr[r - 1] = arr[n - 1];
comb(n - 1, r - 1);
comb(n - 1, r);
}
}
}
- 비트마스크 사용
public class 조합_비트마스크 {
public static char[] src = {'A', 'B', 'C', 'D', 'E'};
public static void main(String[] args) {
// 3개 뽑기
for (int i = 0; i < 1 << src.length; i++) {
// true가 3개인것 뽑기
if(Integer.bitCount(i) == 3) {
for (int j = 0; j < src.length; j++) {
if ( (i & (1 << j)) > 0) {
System.out.print(src[j] + " ");
}
}
System.out.println();
}
}
}
}