μ‘°ν©μ΄λ n κ°μ μ«μ μ€μμ r κ°μ μλ₯Ό μμ μμ΄ λ½λ κ²½μ°λ₯Ό λ§νλ€.
ex) [1,2,3] μ΄λΌλ λ°°μ΄μμ 2κ°μ μλ₯Ό μμ μμ΄ λ½μΌλ©΄
[1,2] [1,3] [2,3]
μ΄λ κ² 3κ°μ§ λμ¨λ€.
μμ΄μ λ½μμ λ λμ€λ [2, 1], [3, 1], [3, 2]
λ±μ μ€λ³΅μ΄λΌ μ κ±°λλ€.
μ¬λ¬ κ°μ§ λ°©λ²μ΄ μμ§λ§ ν΅μ¬μ νλμ
λλ€.
λ°°μ΄μ μ²μλΆν° λ§μ§λ§κΉμ§ λλ©°
1. νμ¬ μΈλ±μ€λ₯Ό μ ννλ κ²½μ°
2. νμ¬ μΈλ±μ€λ₯Ό μ ννμ§ μλ κ²½μ°
μ΄λ κ² λκ°μ§λ‘ λͺ¨λ κ²½μ°λ₯Ό μμ νμ ν΄μ£Όμλ©΄ λ©λλ€.
arr - μ‘°ν©μ λ½μλΌ λ°°μ΄
output - μ‘°ν©μ λ½νλμ§ μ²΄ν¬νλ λ°°μ΄
n - λ°°μ΄μ κΈΈμ΄
r - μ‘°ν©μ κΈΈμ΄
μμ΄κ³Ό λ¬λ¦¬ μ‘°ν©μ r μ μ μ§ν νμκ° μμΌλ―λ‘ μ«μλ₯Ό νλ λ½μλλ§λ€ r μ νλμ© μ€μ¬μ€λλ€.
r == 0 μΌ λκ° r κ°μ μ«μλ₯Ό λ½μ κ²½μ°μ
λλ€.
static void combination(int[] arr, boolean[] visited, int start, int n, int r) {
if(r == 0) {
print(arr, visited, n);
return;
}
for(int i=start; i<n; i++) {
visited[i] = true;
combination(arr, visited, i + 1, n, r - 1);
visited[i] = false;
}
}
static void comb(int[] arr, boolean[] visited, int depth, int n, int r) {
if (r == 0) {
print(arr, visited, n);
return;
}
if (depth == n) {
return;
}
visited[depth] = true;
comb(arr, visited, depth + 1, n, r - 1);
visited[depth] = false;
comb(arr, visited, depth + 1, n, r);
}