* intro>
๐ง bitmask = '์ปดํจํฐ๋ ๋ด๋ถ์ ์ผ๋ก ๋ชจ๋ ์๋ฃ๋ฅผ ์ด์ง์๋ก ํํ. ์ด ํน์ฑ์ ์ด์ฉํด ์ ์์ ์ด์ง์ ํํ์ ์๋ฃ๊ตฌ์กฐ๋ก ์ฐ๋ ๊ธฐ๋ฒ'
(์๋ฐํ๊ฒ ์๋ฃ๊ตฌ์กฐ๋ ์๋)
๐ง 2์ง์ ๊ด๋ จ bit ์ฐ์ฐ์ ์งํํ๋ฉด ์ฌ๋งํ ๋ชจ๋ ์ฐ์ฐ์ time complexity๊ฐ $O(1)$๋ก ํํ๋๋ฏ๋ก ๋งค์ฐ ๋งค์ฐ ์ ์ฉํ๊ณ ํธ๋ฆฌํจ!
๐ง 2์ง์์ 10์ง์ ๊ฐ์ ๋ณํ๋ฐฉ๋ฒ (python)
โ 10์ง์ → 2์ง์: bin() ํจ์ ์ฌ์ฉ (๋ฐํ ๊ฒฐ๊ณผ string)
print(bin(100)) #0b1100100 #type 'str'
โก 2์ง์ → 10์ง์
(1) 2์ง์๊ฐ 0๊ณผ 1๋ก ๊ตฌ์ฑ๋ ์ซ์๋ผ๋ฉด ์์ 0b๋ฅผ ๋ถ์ด๊ณ ์ถ๋ ฅ
(2) 2์ง์๊ฐ ๋ฌธ์์ด ํํ๋ผ๋ฉด int()์ ๋ฌธ์์ด๊ณผ 2๋ฅผ ์ง์ ํด ๋ณํ
โป bin์ ๊ฒฐ๊ณผ๊ฐ ๋ฌธ์์ด๋ก ๋ฐํ๋๋ฏ๋ก, 0b๋ฅผ ๋ถ์ธ ์๋ intํ์ด๊ธฐ์ type์ด ์๋ก ์๋ง๋ค. ๋ฐ๋ผ์, bin์ ๊ฒฐ๊ณผ๋ฅผ intํจ์(๋๋ฒ์งธ ์ธ์์ ๊ผญ 2๋ฅผ ๋ฃ์ด์ค์ผ ํจ)๋ฅผ ์ฌ์ฉํด type์ ๋ฐ๋์ ๋ง์ถฐ์ค์ผ ํจ!
print(0b1100100) #100
print(int('1100100',2)) #100
* ๋นํธ ๋ง์คํฌ
→ ์ฅ์
โ ๋ ๋น ๋ฅธ ์ํ์๊ฐ
โก ๋ ๊ฐ๊ฒฐํ code - ๋ค์ํ ์งํฉ ์ฐ์ฐ๋ค์ ๋ฐ๋ณต๋ฌธ ์์ด ํ ์ค์ ์์ฑ ๊ฐ๋ฅ!
โข ๋ ์์ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋ - ๋ง์ ๋ฐ์ดํฐ๋ฅผ ๋ฏธ๋ฆฌ ๊ณ์ฐํด ๋์ด ํ๋ก๊ทธ๋จ ์๋ ํฅ์, ์บ์ ํจ์จ good, ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ๋ ์ ์ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ
* ๋นํธ ์ฐ์ฐ์
- AND ์ฐ์ฐ(&): ๋์ํ๋ ๋ bit๊ฐ ๋ชจ๋ 1์ผ ๋, 1 ๋ฐํ
- OR ์ฐ์ฐ(|): ๋์ํ๋ ๋ bit๊ฐ ํ๋๋ผ๋ 1์ผ ๋, 1 ๋ฐํ
- XOR ์ฐ์ฐ(^): ๋์ํ๋ ๋ bit๊ฐ ์๋ก ๋ค๋ฅด๋ฉด, 1 ๋ฐํ
- NOT ์ฐ์ฐ(~): bit์ ๊ฐ์ ๋ฐ์ ํ์ฌ ๋ฐํ (1์ด๋ฉด 0, 0์ด๋ฉด 1)
- ์ผ์ชฝ shift ์ฐ์ฐ(<<): ์ผ์ชฝ์ผ๋ก bit๋ฅผ ์ฎ๊ธด๋ค (2๋ฐฐ ๊ณฑํด์ง๋ ์๋ฏธ) (์ค๋ฅธ์ชฝ ์๋ก ์๊ธฐ๋ ๊ณต๊ฐ์ 0 ๋์ด)
- ์ค๋ฅธ์ชฝ shift ์ฐ์ฐ(>>): ์ค๋ฅธ์ชฝ์ผ๋ก bit๋ฅผ ์ฎ๊ธด๋ค (1/2๊ณฑํด์ง๋, ์ฆ 2๋ก ๋๋ ์ง๋ ์๋ฏธ + 1์ด ์ฌ๋ผ์ง๋ ๊ณต๊ฐ์ 0 ๋์ด)
* NOT ์ฐ์ฐ ์ ์ธ ๋ชจ๋ bit ์ฐ์ฐ์ ๋ณตํฉ ์ฐ์ฐ์ ์ฌ์ฉ ๊ฐ๋ฅ! (&=, |=, ^=, <<=, >>=)
* ๋นํธ ์ฐ์ฐ์ ์์
โ ๊ณต์งํฉ / ๊ฝ ์ฐฌ ์งํฉ ํํ
→ ํจ์ bin() ์ฌ์ฉ (bin()์์ 2์ง์๋ก ๋ณํํ๊ณ ์ถ์ 10์ง์๋ฅผ ๋ฃ์ผ๋ฉด ๋๋ค; ์์ 0b๋ 2์ง์์์ ๋ปํจ)
→ ๊ณต์งํฉ
zero=bin(0)
print(zero) #0b0
→ ๊ฝ ์ฐฌ ์งํฉ
ex) ์๋ฅผ ๋ค์ด 1๋ก ๊ฝ์ฐฌ 5bit๋ฅผ ํํํ๊ณ ์ถ๋ค๋ฉด(0b11111), 2์ง์ ์ฐ์ฐ ์ (0b100000 - 0b1) ์ฐ์ฐ์ ์งํํ๋ฉด ๋๋ค. 0b100000์ 1์ ์ผ์ชฝ์ผ๋ก ๊ณ์ shiftํ๋ << ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ๋ฉด ๋จ (1<<5)
full=(1<<5)-1
print(bin(full)) #0b11111
โก ๊ตณ์ด 2์ง์ 0b๋ก ๋ถ์ฌ ํํ์ ์ํ๋๋ผ๋ 10์ง์ ์๋ผ์ง ๋นํธ ์ฐ์ฐ์ ์ฌ์ฉํ ์ ์๋ค. (๊ฒฐ๊ณผ๋ ๋์ผ)
print(0b11 & 0b10) #2
print(3 & 2) #2
* bitmasking ํ์ฉ ์์ >
โป ๋นํธ๋ง์คํน์ ๊ด๋ จ ๋ฌธ์ ๋ฅผ ๋ง์ด ํ๋ฉด์ bit operator์ ๊ณ์ ์ ์์ ํ๋ ๊ฒ ๋งค์ฐ ์ค์ํ๋ค โป
๐ง ์งํฉ ์ฐ์ฐ์์, 1๋ถํฐ N๊น์ง ๊ฐ๊ฐ์ ์๊ฐ ์๋ค๋ฉด ํด๋น ์๋ฆฌ์์ 1, ์๋ค๋ฉด 0์ ์ ๋ ฅํด 2์ง์์ ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํด checking, removing, adding ๋ฑ๋ฑ ๋ค์ํ ์ฐ์ฐ์ ํ ์ ์๋ค. ์ฆ, ์งํฉ ์ฌ๋ถ ํฌํจ ์ฌ๋ถ์ ๋ฐ๋ฅธ ๊ณ์ฐ, ์ถ๊ฐ, ์ญ์ ์ฐ์ฐ์ bimasking์ผ๋ก ์ฐ์ฐ ๊ฐ๋ฅ(๋ฐฑ์ค 11723 ์ฐธ์กฐ)
๐ง ํ๊ต ๊ณผ๋ชฉ๋ณ ๊ต์๊ฐ ์ฃผ์ด์ ธ ์๊ณ , ํ์๋ณ๋ก ์ฌ๋ ์๊ฐ ๊ต์๊ฐ ์ฃผ์ด์ ธ ์์ ๋, ํ์์ด ํด๋น ๊ณผ๋ชฉ์ ๋ค์ ์ ์๋ ์ง์ ์ฌ๋ถ๋ฅผ bitmasking &์ฐ์ฐ์๋ก ์ฐ์ฐ ๊ฐ๋ฅ(๋ฐฑ์ค 14569 ์ฐธ์กฐ)
* ๋ฐฑ์ค ๋ฌธ์ ๋ชจ์>
→ ๊ณ์ ์ ๋ ์์
* ๋ด์ฉ1) https://dojang.io/mod/page/view.php?id=2460
'Computer Science > Algorithms' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๐ผ Regular Expression (0) | 2023.01.11 |
---|---|
๐Dynamic Programming๐ (1) | 2023.01.03 |
๐ Binary Search ๐ (2) | 2022.12.06 |
understanding pesudo-code of QuickSort (0) | 2022.12.05 |
DFS / BFS (0) | 2022.10.14 |
๋๊ธ