๋นํธ
- 0 = false = ์ฌ์ฉ ์ค X
- 1 = true = ์ฌ์ฉ ์ค O
๋นํธ ์ฐ์ฐ์
- & : AND ์ฐ์ฐ
- | : OR ์ฐ์ฐ
- ^ : XOR ์ฐ์ฐ (๊ฐ์ผ๋ฉด 0, ๋ค๋ฅด๋ฉด 1)
- ~ : ๋ชจ๋ ๋นํธ ๋ฐ์
- << : ๋นํธ ์ด์ ์ผ์ชฝ์ผ๋ก ์ด๋ (๋น ๊ณต๊ฐ์ 0์ผ๋ก ์ฑ์ด๋ค)
- >> : ๋นํธ ์ด์ ์ค๋ฅธ์ชฝ์ผ๋ก ์ด๋ (๋น ๊ณต๊ฐ์ ๋ถํธ๋นํธ๋ก ์ฑ์ด๋ค)
- >>> : ๋นํธ ์ด์ ์ค๋ฅธ์ชฝ์ผ๋ก ์ด๋ (๋น ๊ณต๊ฐ์ 0์ผ๋ก ์ฑ์ด๋ค)
&’์ ํด๋น ์ซ์๊ฐ ์ฌ์ฉ์ค์ธ์ง, ‘|’์ ํด๋น ์ซ์๋ฅผ ์ฌ์ฉ ์ค์์ ๋ํ๋ด๊ธฐ ์ํด ์ฌ์ฉ
1. ์์ด ์ฝ๋ - ๋นํธ ๋ง์คํน ์ฌ์ฉ
import java.util.Arrays;
public class Permutation_BitMasking {
static int R, N, nums[], set[];
public static void main(String[] args) {
// nPr
R = 2;
N = 5;
nums = new int[] { 1, 2, 3, 4, 5 };
set = new int[R]; // ์์ด์ ๋ง๋ค์์ ๋์ ์งํฉ
permutation(0, 0);
}
private static void permutation(int L, int flag) { // L: N๊ฐ์ ์ซ์ ์ค ๋ฝ์ ๊ฐ์
if (L == R) {
System.out.println(Arrays.toString(set));
return;
}
for (int i = 0; i < N; i++) {
// ํด๋น ์์น์ ์ซ์๊ฐ ์ฌ์ฉ ์ค์ธ์ง ํ์ธ
**if ((flag & 1 << i) != 0)**
continue;
set[L] = nums[i]; // ํด๋น ์์น ์ซ์๊ฐ ์ฌ์ฉ ์ค์ด์ง ์์ผ๋ฉด ์งํฉ์ ๋ฃ๊ธฐ
// ๋ค์ ์ ๋ฝ์ผ๋ฌ ๊ฐ๊ธฐ
**permutation(L + 1, flag | 1 << i);** // i๋ฒ์งธ ์ซ์๊ฐ ์ฌ์ฉ ์ํ์์ ์ธํ
}
}
}
2. ์กฐํฉ ์ฝ๋ - ๋นํธ๋ง์คํน ์ฌ์ฉ
package study12_Binary;
import java.util.Arrays;
public class Permutation_BitMasking {
static int R, N, nums[], set[];
public static void main(String[] args) {
// nCr
R = 2;
N = 5;
nums = new int[] { 1, 2, 3, 4, 5 };
set = new int[R]; // ์กฐํฉ์ ๋ง๋ค์์ ๋์ ์งํฉ
combination(0, 0, 0);
}
private static void combination(int L, int start, int flag) { // L: N๊ฐ์ ์ซ์ ์ค ๋ฝ์ ๊ฐ์
if (L == R) {
System.out.println(Arrays.toString(set));
return;
}
for (int i = start; i < N; i++) {
// ํด๋น ์์น์ ์ซ์๊ฐ ์ฌ์ฉ ์ค์ธ์ง ํ์ธ
if ((flag & 1 << i) != 0)
continue;
set[L] = nums[i]; // ํด๋น ์์น ์ซ์๊ฐ ์ฌ์ฉ ์ค์ด์ง ์์ผ๋ฉด ์งํฉ์ ๋ฃ๊ธฐ
// ๋ค์ ์ ๋ฝ์ผ๋ฌ ๊ฐ๊ธฐ
combination(L + 1, i + 1, flag | 1 << i); // i๋ฒ์งธ ์ซ์๊ฐ ์ฌ์ฉ ์ํ์์ ์ธํ
}
}
}
๋๊ธ