๋๋์ด ์์ด, ์กฐํฉ, ๋ถ๋ถ์งํฉ ์๋ฆฌ์ฆ ์ค ๋ง์ง๋ง์ธ ๋ถ๋ถ์งํฉ ๋ฑ์
(์์ด, ์กฐํฉ ์ ๋ฆฌ๋ ์๋๋ฅผ ์ฐธ๊ณ ํด์ฃผ์ธ์! ๐)
https://seolhee2750.tistory.com/229
https://seolhee2750.tistory.com/230
๐ ๋ถ๋ถ์งํฉ
๋ถ๋ถ์งํฉ์ ์ค๋ณต๋ ๊ฐ์ง์ง ์๊ณ , ์์๋ ๊ฐ์ง์ง ์์ผ๋ฉฐ ์ต๋ r๊ฐ๋ฅผ ๋ฝ์ ๋์ดํ๋ ๊ฒ์ ๋งํ๋ค.
์์ด๊ณผ ์กฐํฉ์ ๋ชจ๋ ์ ํด์ง ๊ฐ์๋งํผ๋ง ๋ฝ์ ๋์ดํ์๋ค.
ํ์ง๋ง ๋ถ๋ถ์งํฉ์ ๊ฒฝ์ฐ ์ํ๋ ๊ฐ์'๊น์ง'์ ๋ชจ๋ ๊ฒฝ์ฐ์ ์๋ฅผ ๋ฝ์ ๋์ดํ๋ค.
(3๊ฐ๋ฅผ ์ ๋ ฅํ๋ฉด 0๊ฐ์ผ ๋๋ถํฐ 3๊ฐ์ผ ๋๊น์ง๋ฅผ ๋ชจ๋ ๊ณ ๋ ค!)
์๋ฅผ ๋ค์ด {1, 2, 3}์ด ์ฃผ์ด์ง๋ฉด
{}, {1}, {2}, {3}, {1, 2}, ..., {1, 2, 3} ์ด๋ ๊ฒ!!
๐ ๋ถ๋ถ์งํฉ ๊ตฌํ
public class SubSet {
static char[] src = { 'a', 'b', 'c', 'd' };
/*
* ๋ถ๋ถ ์งํฉ: ์ค๋ณต X, ์์ X
* @param toCheck - ์ ํ๋ ์ ์๋ ์์์ ์ธ๋ฑ์ค
* @param checked - ์ ํ๋ ์์๋ค์ ์๋ฆฌ๋ฅผ true๋ก ํํ
*/
static void powerSetDupPer(int toCheck, boolean[] checked) {
if(toCheck == checked.length) { // ๊ธฐ์ ์กฐ๊ฑด: choosed๋ฅผ ๋ค ์ฑ์ ๋ค๋ฉด ๋
print(checked);
return;
}
// toCheck์ ํด๋นํ๋ ์์๋ฅผ ์ ํํ ๊ฒ์ธ์ง ์ํ ๊ฒ์ธ์ง
checked[toCheck] = true;
powerSetDupPer(toCheck+1, checked);
checked[toCheck] = false;
powerSetDupPer(toCheck+1, checked);
}
static void print(boolean[] temp) {
List<Character> selected = new ArrayList<>();
List<Character> unselected = new ArrayList<>();
for(int i = 0; i < temp.length; i++) {
if(temp[i]) selected.add(src[i]);
else unselected.add(src[i]);
}
System.out.println(selected + " : " + unselected);
}
public static void main(String[] args) {
System.out.println("๋ถ๋ถ์งํฉ");
powerSetDupPer(0, new boolean[3]); // src๋ก ๊ตฌ์ฑ ๊ฐ๋ฅํ ์ต๋ 3๊ฐ์ ๋ชจ๋ ๋ถ๋ถ์งํฉ ์ถ๋ ฅ
}
}
checked ๋ฐฐ์ด์ ์ ํํ ์์๋ true๋ก ์ฒ๋ฆฌํด์ฃผ์ด ์ ํํ์์ ํ์ํ๋ ์์ผ๋ก ๊ตฌํํ๋ค.
booleanํํ์ checked ๋ฐฐ์ด์ ์์ฑํ๋ฉด, print ๋ฉ์๋๋ฅผ ์ด์ฉํด์ ์งํฉ์ ์ถ๋ ฅํ๋ค.
๐ ์ ๋ฆฌ
๋ถ๋ถ ์งํฉ์ ์ ํํ ๊ฐ์ ๋ด์์ ๊ฐ๋ฅํ ๋ชจ๋ ์กฐํฉ์ ์๋ฏธํ๋ค.
๋ถ๋ถ ์งํฉ ๋ํ ์์ด๊ณผ ์กฐํฉ์ฒ๋ผ ์ฌ๊ท๋ก ๊ตฌํํ ์ ์๋๋ฐ,
0๊ฐ๋ถํฐ n๊ฐ๊น์ง์ ๋ชจ๋ ๊ฒฝ์ฐ๋ฅผ ์ฒดํฌํด์ฃผ์ด์ผ ํ๋ฏ๋ก,
๋ฐ๋ก ๋ฐฐ์ด์ ๊ฐ์ ๋ด์ง ์๊ณ boolean์ผ๋ก ์ฒดํฌํด์ค ๋ค ๊ฐ์ ๋ฐ๋ก ์ถ๋ ฅํ๋ ์์ผ๋ก ์์ฑํ๋ค.
'5๏ธโฃ CS > Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Java Algorithm Note] ๋ค์ต์คํธ๋ผ (feat. BOJ #1753 ์ต๋จ๊ฒฝ๋ก) (0) | 2022.08.25 |
---|---|
[Java Algorithm Note] ์กฐํฉ (feat. ์ฌ๊ท) (0) | 2022.08.15 |
[Java Algorithm Note] ์์ด (feat. ์ฌ๊ท) (0) | 2022.08.15 |
[Swift Algorithm Note] ์ต์ฅ ์ฆ๊ฐ ๋ถ๋ถ ์์ด 2 (feat. BS) (0) | 2021.08.29 |
[Swift Algorithm Note] ์ต์ฅ ์ฆ๊ฐ ๋ถ๋ถ ์์ด (feat. DP) (0) | 2021.08.28 |
๋๊ธ