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);
}
}
๐ ํจ๊ป ํ์ด๋ณด๋ฉด ์ข์ ๋ฐฑ์ค ๋ฌธ์