OR ์ฐ์ฐ๊ณผ AND ์ฐ์ฐ
OR ์ฐ์ฐ์ ์ด์ง์์ ๊ฐ ์๋ฆฌ์๊ฐ ํ๋๋ผ๋ 1์ด๋ฉด ํด๋น ์๋ฆฟ์๋ 1, ์๋๋ฉด 0์ ๋ฆฌํด
AND ์ฐ์ฐ์ ์ด์ง์์ ๊ฐ ์๋ฆฌ์ ๋ชจ๋๊ฐ 1์ด๋ฉด ํด๋น ์๋ฆฟ์๋ 1, ์๋๋ฉด 0์ ๋ฆฌํด
public static void main(String []args) {
int n1 = 4; // 100
int n2 = 5; // 101
// OR ์ฐ์ฐ
int n3 = n1 | n2; // 101 -> 5
// AND ์ฐ์ฐ
int n4 = n1 & n2; // 100 -> 4
System.out.println(n3);
System.out.println(n4);
}
์ํํธ ์ฐ์ฐ
์ด์ง์์ ๋นํธ๋ฅผ ์ํ๋ ๊ฐ๋งํผ ์ด๋์ํค๋ ์ฐ์ฐ
public static void main(String []args) {
int n1 = 4; // 100
int n2 = 5; // 101
// << ์ผ์ชฝ ์ํํธ
int n3 = n1 << 2; // 100์ ์ผ์ชฝ์ผ๋ก ๋์๋ฆฌ๋งํผ ์ด๋ -> 10000(16)
// >> ์ค๋ฅธ์ชฝ ์ํํธ
int n4 = n2 >> 1; // 101์ ์ค๋ฅธ์ชฝ์ผ๋ก ํ์๋ฆฌ๋งํผ ์ด๋ -> 10(2)
System.out.println(n3);
System.out.println(n4);
}
์ด์ง์ ๋ฌธ์์ด์ int๋ก ๋ณํ
public static void main(String []args) {
int n = stringToInt("100"); // 4
System.out.println(n);
n = stringToInt("101"); // 5
System.out.println(n);
}
// ์ด์ง์ ํ์์ ๋ฌธ์์ด์ int๋ก ๊ณ์ฐ
static int stringToInt(String bitString) {
int result = 0;
for(int i=0; i<bitString.length(); i++) {
if(bitString.charAt(i) == '1') {
// OR ์ฐ์ฐ๊ณผ ์ํํธ ์ฐ์ฐ
result |= (1 << (bitString.length() - 1 - i));
}
}
return result;
}
XOR ์ฐ์ฐ
์ด์ง์์ ๊ฐ์ ๊ฐ ์๋ฆฟ์๊ฐ ์๋ก ๋ค๋ฅผ ๊ฒฝ์ฐ, 1
public static void main(String []args) {
int n1 = 4; // 100
int n2 = 5; // 101
// XOR ์ฐ์ฐ
int n3 = n1 ^ n2; // 001(1)
// ์๋ฆฟ์๊ฐ ๋ค๋ฅธ ๊ฒฝ์ฐ, XOR ์ฐ์ฐ
n1 = 8; // 10000
int n4 = n1 ^ n2; // 1000 ^ 101 = 1101(13)
System.out.println(n3);
System.out.println(n4);
}
์ด์ง์ ๊ฐ์ ๊ฐ ์๋ฆฟ์ ์ค์ 1์ ๊ฐ์ ๊ตฌํ๊ธฐ / Brian Kernighan's Algorithm
Brian Kernighan's Algorithm์ ์๋ฆฌ๋ ๋ค์๊ณผ ๊ฐ๋ค
n-1์ ๊ฐ์ n์ด ๊ฐ์ง๊ณ ์๋ ๊ฐ์ฅ ์ค๋ฅธ์ชฝ์ 1๋ถํฐ ๊ฐ์ด ๋ณํ๋ค.
์์. n = 10100 -> n-1 = 10011
์ดํ ๋ ๊ฐ์ AND์ฐ์ฐ์ n & (n - 1) ํด์ฃผ๋ฉด, 10000๋๋ฉฐ ๊ฐ์ฅ ์ค๋ฅธ์ชฝ์ ์๋ 1์ด ์ ๊ฑฐ๋๋ค.
์ด ์ฐ์ฐ์ ๋ฐ๋ณตํ์ฌ ์ต์ข ์ ์ผ๋ก ๊ฐ์ด 0์ด ๋๋ค๋ฉด, ๋ฐ๋ณตํ ์ฐ์ฐ์ ๊ฐ์๋ n์ด ๊ฐ์ง๊ณ ์๋ 1์ ๊ฐ์์ ๊ฐ๋ค.
public static void main(String []args) {
int n1 = 4; // 100
int n2 = 5; // 101
int n3 = 7; // 111
System.out.println(BKA(n1)); // 1
System.out.println(BKA(n2)); // 2
System.out.println(BKA(n3)); // 3
}
// Brian Kernighan's Algorithm
static int BKA(int n) {
int cnt = 0;
while(n > 0) {
n &= (n - 1);
cnt++;
}
return cnt;
}
'Programming > Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Java] Softeer Level 2- "GPT์ ์ซ์ ๋น๊ต" ์๋ฐ ํ์ด (0) | 2025.04.06 |
---|---|
[Kotlin] ๋ฐฑ์ค 2504 ๊ดํธ์ ๊ฐ ์ฝํ๋ฆฐ ํ์ด - stack (0) | 2025.03.31 |
[Kotlin] ๋ฐฑ์ค 14888 - ์ฐ์ฐ์ ๋ผ์๋ฃ๊ธฐ(์ฌ๊ท์์ ํ์ DFS, ๋ฐฑํธ๋ํน) (1) | 2025.03.09 |
[Kotlin] ๋ฐฑ์ค 1978 ์์ ์ฐพ๊ธฐ (1) | 2025.03.08 |
[Kotlin] ๋ฐฑ์ค 1292 - ์ฝ๊ฒ ํธ๋ ๋ฌธ์ (1) | 2024.11.13 |