๋นํธ๋ง์คํฌ(BitMask)
๋นํธ๋ ์ปดํจํฐ์์ ๋ค๋ฃจ๋ ์ต์ ๋จ์์ด๋ฉฐ, ์ ์๋ฅผ ์ด์ง์(0, 1)๋ก ํํํฉ๋๋ค. ์ด๋ฌํ ๋นํธ์ ํน์ฑ์ ์ด์ฉํ ์ฐ์ฐ์ ํตํด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํด ๊ธฐ๋ฒ์ ๋นํธ๋ง์คํฌ(BitMask)๋ผ๊ณ ํฉ๋๋ค.
์ด์ง์๋ 0 ๋๋ 1์ ์ด์ฉํ๋ฏ๋ก ํ๋์ ๋นํธ(bit)๊ฐ ํํํ ์ ์๋ ๊ฒฝ์ฐ๋ ๋ ๊ฐ์ง์ ๋๋ค.
๋ณดํต ์ด๋ค ๋นํธ๊ฐ 1์ด๋ฉด ์ ๊ตฌ๊ฐ "์ผ์ ธ ์๋ค", 0์ด๋ฉด "๊บผ์ ธ ์๋ค"๋ผ๊ณ ๋งํ๋ฉฐ, ์ ๊ตฌ๋ฟ๋ง ์๋๋ผ ์๋์ฒ๋ผ ๋ ๊ฐ์ง ๊ฒฝ์ฐ๋ก ํํํ ์ ์๋ ์์๋ ๋ชจ๋ ๊ฐ๋ฅํฉ๋๋ค.
- ์์์ ์์ผ๋ฉด 1, ์์์ผ๋ฉด 0
- ๋จ์๋ฉด 1, ์ฌ์๋ฉด 0
- ์ ๋ต์ด๋ฉด 1, ์ค๋ต์ด๋ฉด 0
์ฌ์ฉ ์ด์
๋นํธ๋ง์คํฌ ๊ธฐ๋ฒ์ ์ฌ์ฉํ์ฌ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ํฐ ์ด์ ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- ์ํ ์๊ฐ์ด ๋น ๋ฅด๋ค.
- ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ด ์ ๋ค.
๋นํธ๋ง์คํฌ ์ฐ์ฐ์ bit ์ฐ์ฐ์ด๊ธฐ์ O(1)์ ์๊ฐ ๋ณต์ก๋๋ฅผ ๊ฐ์ง๋ฉฐ, ์ข ์ข ๋ฌธ์ ๋ฅผ ํ๋ค ๋ณด๋ฉด ๋นํธ๋ง์คํน ๊ธฐ๋ฒ์ ์ฌ์ฉํ์ง ์์ผ๋ฉด ์๊ฐ ๋ด์ ํ์ง ๋ชปํ๋ ๋ฌธ์ ๋ค์ด ์กด์ฌํฉ๋๋ค.
๋นํธ๋ง์คํน์ ํ์ฉํ์ฌ ํด๊ฒฐํ๋ ๋ํ์ ์ธ ๋ฌธ์ ๋ค์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- https://www.acmicpc.net/problem/15787
- https://www.acmicpc.net/problem/2098
- https://www.acmicpc.net/problem/1562
๋นํธ ์ฐ์ฐ์
๋นํธ ์ฐ์ฐ์๋ ๋นํธ(bit) ๋จ์๋ก ๋ ผ๋ฆฌ ์ฐ์ฐ์ ํ ๋ ์ฌ์ฉํ๋ ์ฐ์ฐ์์ ๋๋ค. ๋ํ ๋นํธ ๋จ์๋ก ์ ์ฒด ๋นํธ๋ฅผ ์ผ์ชฝ์ด๋ ์ค๋ฅธ์ชฝ์ผ๋ก ์ด๋์ํฌ ๋๋ ์ฌ์ฉํฉ๋๋ค.
& | ๋์๋๋ ๋นํธ๊ฐ ๋ชจ๋ 1์ด๋ฉด 1์ ๋ฐํํจ. (๋นํธ AND ์ฐ์ฐ) |
| | ๋์๋๋ ๋นํธ ์ค์์ ํ๋๋ผ๋ 1์ด๋ฉด 1์ ๋ฐํํจ. (๋นํธ OR ์ฐ์ฐ) |
^ | ๋์๋๋ ๋นํธ๊ฐ ์๋ก ๋ค๋ฅด๋ฉด 1์ ๋ฐํํจ. (๋นํธ XOR ์ฐ์ฐ) |
~ | ๋นํธ๋ฅผ 1์ด๋ฉด 0์ผ๋ก, 0์ด๋ฉด 1๋ก ๋ฐ์ ์ํด. (๋นํธ NOT ์ฐ์ฐ) |
<< | ์ง์ ํ ์๋งํผ ๋นํธ๋ค์ ์ ๋ถ ์ผ์ชฝ์ผ๋ก ์ด๋์ํด. (left shift ์ฐ์ฐ) |
>> | ๋ถํธ๋ฅผ ์ ์งํ๋ฉด์ ์ง์ ํ ์๋งํผ ๋นํธ๋ฅผ ์ ๋ถ ์ค๋ฅธ์ชฝ์ผ๋ก ์ด๋์ํด. (right shift ์ฐ์ฐ) |
1. ๋ค์ ๊ทธ๋ฆผ์ ๋นํธ AND ์ฐ์ฐ์(&)์ ๋์์ ๋ํ๋ ๋๋ค.
์ด์ฒ๋ผ ๋นํธ AND ์ฐ์ฐ์๋ ๋์๋๋ ๋ ๋นํธ๊ฐ ๋ชจ๋ 1์ผ ๋๋ง 1์ ๋ฐํํ๋ฉฐ, ๋ค๋ฅธ ๊ฒฝ์ฐ๋ ๋ชจ๋ 0์ ๋ฐํํฉ๋๋ค.
2. ๋ค์ ๊ทธ๋ฆผ์ ๋นํธ OR ์ฐ์ฐ์(|)์ ๋์์ ๋ํ๋ ๋๋ค.
์ด์ฒ๋ผ ๋นํธ OR ์ฐ์ฐ์๋ ๋์๋๋ ๋ ๋นํธ ์ค ํ๋๋ผ๋ 1์ด๋ฉด 1์ ๋ฐํํ๋ฉฐ, ๋ ๋นํธ๊ฐ ๋ชจ๋ 0์ผ ๋๋ง 0์ ๋ฐํํฉ๋๋ค.
3. ๋ค์ ๊ทธ๋ฆผ์ ๋นํธ XOR ์ฐ์ฐ์(^)์ ๋์์ ๋ํ๋ ๋๋ค.
์ด์ฒ๋ผ ๋นํธ XOR ์ฐ์ฐ์๋ ๋์๋๋ ๋ ๋นํธ๊ฐ ์๋ก ๋ค๋ฅด๋ฉด 1์ ๋ฐํํ๊ณ , ์๋ก ๊ฐ์ผ๋ฉด 0์ ๋ฐํํฉ๋๋ค.
4. ๋ค์ ๊ทธ๋ฆผ์ ๋นํธ NOT ์ฐ์ฐ์(~)์ ๋์์ ๋ํ๋ ๋๋ค.
์ด์ฒ๋ผ ๋นํธ NOT ์ฐ์ฐ์๋ ํด๋น ๋นํธ๊ฐ 1์ด๋ฉด 0์ ๋ฐํํ๊ณ , 0์ด๋ฉด 1์ ๋ฐํํฉ๋๋ค.
5. ์ํํธ ์ฐ์ฐ์(<<, >>)์ ์์ ์ ๋๋ค.
<< ์ฐ์ฐ์๋ Left Shift๋ผ๊ณ ๋ถ๋ฅด๋ฉฐ, ๋ชจ๋ ๋นํธ๊ฐ ์ผ์ชฝ์ผ๋ก ์ ํด์ง ์๋งํผ ์ด๋ํ๋ ๊ธฐ๋ฅ์ ์ํํฉ๋๋ค.
A << B ๋ผ๊ณ ํ์ํ๋ฉฐ, 'A'๋ฅผ ์ผ์ชฝ์ผ๋ก 'B' ๋นํธ๋งํผ ์ด๋ํ๋ผ๋ ์๋ฏธ๋ก ์ฌ์ฉํฉ๋๋ค.
>> ์ฐ์ฐ์๋ Right Shift๋ผ๊ณ ๋ถ๋ฅด๋ฉฐ, ๋ชจ๋ ๋นํธ๊ฐ ์ฐ์ธก์ผ๋ก ์ ํด์ง ์๋งํผ ์ด๋ํ๋ ๊ธฐ๋ฅ์ ์ํํฉ๋๋ค.
A >> B ๋ผ๊ณ ํ์ํ๋ฉฐ, 'A'๋ฅผ ์ค๋ฅธ์ชฝ์ผ๋ก 'B' ๋นํธ๋งํผ ์ด๋ํ๋ผ๋ ์๋ฏธ๋ก ์ฌ์ฉํฉ๋๋ค.
์ฐธ๊ณ
'Algorithm ๐ง๐ปโ๐ป > Note' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[C++, ํ ํ๋ฆฟ] ๋ฐฐ์ด ๋๋ฆฌ๊ธฐ์ ๋ฌํฝ์ด ๋ฐฐ์ด (0) | 2022.09.22 |
---|---|
[C++, ํ ํ๋ฆฟ] ์ ๋์จ ํ์ธ๋ (0) | 2022.09.02 |
[C++, ํ ํ๋ฆฟ] map find index (0) | 2022.08.23 |
[C++, ํ ํ๋ฆฟ] ๋ค์ต์คํธ๋ผ (0) | 2022.05.28 |
[C++, ํ ํ๋ฆฟ] ํ๋ก์ด๋-์์ฌ (0) | 2022.05.13 |
[C++, ์ ์ฉํ ๋ฌธ๋ฒ] upper_bound, lower_bound (0) | 2022.05.11 |
๋๊ธ