Algorithm

๋ถ€๋ถ„์ง‘ํ•ฉ(Subset)

jeong_ii 2023. 10. 31. 16:09

๐Ÿ”น ๋ถ€๋ถ„์ง‘ํ•ฉ์ด๋ž€ ?

  • ํ•œ ์ง‘ํ•ฉ์˜ ์›์†Œ๋“ค๋กœ๋งŒ ๊ตฌ์„ฑํ•œ ์ง‘ํ•ฉ์„ ๋งํ•œ๋‹ค.
    • ์ง‘ํ•ฉ์˜ ์›์†Œ๊ฐ€ ์ด n๊ฐœ์ผ ๋•Œ, ๊ณต์ง‘ํ•ฉ์„ ํฌํ•จํ•œ ๋ถ€๋ถ„์ง‘ํ•ฉ์˜ ๊ฐœ์ˆ˜๋Š” 2^n๊ฐœ๋‹ค.
    • ์ฆ‰, ๊ฐ๊ฐ์˜ ์›์†Œ๋“ค์„ ๋ถ€๋ถ„์ง‘ํ•ฉ์— ํฌํ•จ์‹œํ‚ค๊ฑฐ๋‚˜ ํฌํ•จํ•˜์ง€ ์•Š๋Š” ๋‘ ๊ฐ€์ง€์˜ ๊ฒฝ์šฐ๋ฅผ ๋ชจ๋“  ์›์†Œ์— ์ ์šฉํ•œ ๊ฒƒ์˜ ๊ฒฝ์šฐ์˜ ์ˆ˜์™€ ๊ฐ™๋‹ค.

 

๐Ÿ”น ์žฌ๊ท€๋ฅผ ์ด์šฉํ•œ ๊ตฌํ˜„

์žฌ๊ท€๋ฅผ ์ด์šฉํ•˜์—ฌ ๋ถ€๋ถ„์ง‘ํ•ฉ์„ ๊ตฌํ˜„ํ•  ๋•Œ๋Š”

  • ํ˜„์žฌ ์ธ๋ฑ์Šค๋ฅผ ํฌํ•จํ•˜๋Š” ๊ฒฝ์šฐ
  • ํ˜„์žฌ ์ธ๋ฑ์Šค๋ฅผ ํฌํ•จํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ

๋‘ ๊ฐ€์ง€์˜ ๊ฒฝ์šฐ์— ๋Œ€ํ•ด ๋ชจ๋‘ ํ™•์ธํ•œ ํ›„ ํ˜„์žฌ ์ธ๋ฑ์Šค๊ฐ€ n์ด ๋˜์—ˆ์„ ๋•Œ ์ถœ๋ ฅํ•œ๋‹ค.

 

๐Ÿ’ญ Java  Code

public class Main {
	public static void main(String[] args) {
        int[] arr = {1, 2, 3};
        int n = 3;
        boolean[] checked = new boolean[n];

        subset(arr, checked, n, 0);
    }
    
    private static void subset(int[] arr, boolean[] checked, int n, int idx) {
        if (idx == n) { // ๋ชจ๋“  ์ธ๋ฑ์Šค๋ฅผ ๋‹ค ํƒ์ƒ‰ํ–ˆ๋‹ค๋ฉด
            for (int i = 0; i < n; i++) {
                if (checked[i]) {
                    System.out.print(arr[i] + " ");
                }
            }
            System.out.println();
            return;
        }

        // ํ˜„์žฌ ์ธ๋ฑ์Šค ํฌํ•จ
        checked[idx] = true;
        subset(arr, checked, n, idx+1);
        // ํ˜„์žฌ ์ธ๋ฑ์Šค ํฌํ•จ ์•ˆํ•จ
        checked[idx] = false;
        subset(arr, checked, n, idx+1);
    }
}


 

 

๐Ÿ“ ํ•จ๊ป˜ ํ’€์–ด๋ณด๋ฉด ์ข‹์€ ๋ฐฑ์ค€ ๋ฌธ์ œ