Skip to content

Latest commit

Β 

History

History
77 lines (54 loc) Β· 1.71 KB

Combination.md

File metadata and controls

77 lines (54 loc) Β· 1.71 KB

μ‘°ν•©(Combination)

μ‘°ν•©μ΄λž€ n 개의 숫자 μ€‘μ—μ„œ r 개의 수λ₯Ό μˆœμ„œ 없이 λ½‘λŠ” 경우λ₯Ό λ§ν•œλ‹€.

ex) [1,2,3] μ΄λΌλŠ” λ°°μ—΄μ—μ„œ 2개의 수λ₯Ό μˆœμ„œ 없이 λ½‘μœΌλ©΄
[1,2] [1,3] [2,3] μ΄λ ‡κ²Œ 3가지 λ‚˜μ˜¨λ‹€.

μˆœμ—΄μ„ λ½‘μ•˜μ„ λ•Œ λ‚˜μ˜€λŠ” [2, 1], [3, 1], [3, 2] 등은 쀑볡이라 μ œκ±°λœλ‹€.


μ—¬λŸ¬ 가지 방법이 μžˆμ§€λ§Œ 핡심은 ν•˜λ‚˜μž…λ‹ˆλ‹€.

배열을 μ²˜μŒλΆ€ν„° λ§ˆμ§€λ§‰κΉŒμ§€ 돌며

1. ν˜„μž¬ 인덱슀λ₯Ό μ„ νƒν•˜λŠ” 경우
2. ν˜„μž¬ 인덱슀λ₯Ό μ„ νƒν•˜μ§€ μ•ŠλŠ” 경우

μ΄λ ‡κ²Œ λ‘κ°€μ§€λ‘œ λͺ¨λ“  경우λ₯Ό 완전탐색 ν•΄μ£Όμ‹œλ©΄ λ©λ‹ˆλ‹€.



1️⃣ λ°±νŠΈλž˜ν‚Ή

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;
    }
}



2️⃣ μž¬κ·€

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);
}