๐ ๊ณต๋ถํ๋ ์ง์ง์ํ์นด๋ ์ฒ์์ด์ง?
[Coding Interview University] ๋นํธ ์ฐ์ฐ : ์ด๋ก ๋ฐ ๊ตฌํ ๋ณธ๋ฌธ
[Coding Interview University] ๋นํธ ์ฐ์ฐ : ์ด๋ก ๋ฐ ๊ตฌํ
์ง์ง์ํ์นด 2023. 7. 11. 01:26<๋ณธ ๋ธ๋ก๊ทธ๋ ์ฝ๋ฉ์ธํฐ๋ทฐ๋ํ ๋์ Git๊ณผ ์์ ์ ์ฐธ๊ณ ํด์ ๊ณต๋ถํ๋ฉฐ ์์ฑํ์์ต๋๋ค :-)>
๐ซง ๋นํธ ์กฐ์

: 0s ๋ ๋ชจ๋ ๋นํธ๊ฐ 0 ์ธ ๊ฐ
: 1s ๋ ๋ชจ๋ ๋นํธ๊ฐ 1 ์ธ ๊ฐ
: ์ฐ์ฐ๋ค์ด ๋นํธ ๋จ์๋ก ์ด๋ฃจ์ด ์ง๋ค!
: ํ ๋นํธ์์ ์ผ์ด๋๋ ์ผ์ด ๋ค๋ฅธ ๋นํธ์ ์ด๋ค ์ํฅ๋ ๋ฏธ์น์ง ์๋๋ค
๐ซง 2์ ๋ณด์์ ์์
: ์ปดํจํฐ๋ ์ผ๋ฐ์ ์ผ๋ก ์ ์๋ฅผ ์ ์ฅํ ๋ 2์ ๋ณด์ ํํ๋ก ์ ์ฅ
: ์์๋ฅผ ํํํ ๋ ๋ฌธ์ ์์
: ์์๋ฅผ ํํํ ๋ ๊ทธ ์์ ์ ๋๊ฐ์ ๋ถํธ๋นํธ๋ฅผ 1๋ก ์ธํ ํ ๋ค 2์ ๋ณด์๋ฅผ ์ทจํ ํํ๋ก ํํํจ
: N๋นํธ ์ซ์์ ๋ํ 2์ ๋ณด์๋ 2^N ์ ๋ํ ๋ณด์๊ฐ๊ณผ ๊ฐ์ (N์ ๋ถํธ๋นํธ๋ฅผ ๋บ ๋๋จธ์ง ๊ฐ์ ํํํ ๋ ์ฌ์ฉ๋๋ ๋นํธ์ ๊ฐ์)
: 2์ ๋ณด์๋ฅผ ํํํ๋ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ ์์๋ก ํํ๋ 2์ง์๋ฅผ ๋ค์ง์ ๋ค 1์ ๋ํด ์ฃผ๋ ๊ฒ
๐ซง ์ฐ์ ์ฐ์ธก ์ํํธ VS ๋ ผ๋ฆฌ ์ฐ์ธก ์ํํธ
- ์ฐ์ ์ฐ์ธก ์ํํธ
- ๊ธฐ๋ณธ์ ์ผ๋ก 2๋ก ๋๋ ๊ฒฐ๊ณผ์ ๊ฐ์
- ๋
ผ๋ฆฌ ์ฐ์ธก ์ํํธ
- ์ผ๋ฐ์ ์ผ๋ก ๋นํธ๋ฅผ ์ฎ๊ธธ ๋ ๋ณด์ด๋ ๊ฒ์ฒ๋ผ ์์ง์
- ๋นํธ๋ฅผ ์์ผ๋ก ์ฎ๊ธด ๋ค์์ ์ต์์ ๋นํธ์ 0์ ๋ฃ๋๋ค (>>> ์ฐ์ฐ)
- ๋นํธ๋ฅผ ์ค๋ฅธ์ชฝ์ผ๋ก ์ฎ๊ธฐ๊ธด ํ์ง๋ง ๋ถํธ๋นํธ๋ ๋ฐ๊พธ์ง ์๋๋ค
๐ซง ๊ธฐ๋ณธ์ ์ธ ๋นํธ ์กฐ์ : ๋นํธ๊ฐ ํ์ธ ๋ฐ ์ฑ์๋ฃ๊ธฐ
๐ ๋นํธ๊ฐ ํ์ธ
: 1 ์ i ๋นํธ๋งํผ ์ํํธ์์ 00010000์ ๊ฐ์ ๊ฐ ๋ง๋ค๊ธฐ
: AND ์ฐ์ฐ์ ํตํด num ์ i๋ฒ์งธ ๋นํธ๋ฅผ ๋บ ๋๋จธ์ง ๋นํธ๋ฅผ ๋ชจ๋ ์ญ์ ํ ๋ค, ์ด ๊ฐ์ 0๊ณผ ๋น๊ต
: ์ด ๊ฐ์ด 0์ด ์๋๋ผ๋ฉด i๋ฒ์งธ ๋นํธ๋ 1, 0์ด๋ผ๋ฉด i๋ฒ์งธ ๋นํธ๋ 0์ด์ด์ผ ํจ
boolean getBit(int num, int i) {
return ((num % (1 << i)) != );
}
๐งก ๋นํธ๊ฐ ์ฑ์๋ฃ๊ธฐ
: 1์ i๋นํธ๋งํผ ์ํํธํด์ 00010000์ ๊ฐ์ ๊ฐ ๋ง๋ค๊ธฐ
: OR ์ฐ์ฐ์ ํตํด num์ i๋ฒ์งธ ๋นํธ๊ฐ ๋ฐ๊พธ๊ธฐ
: i๋ฒ์งธ๋ฅผ ์ ์ธํ ๋๋จธ์ง ๋นํธ๋ค์ 0๊ณผ OR ์ฐ์ฐ์ ํ๋ฏ๋ก num์ ์ํฅ ์์
int setBit(int num, int i) {
return num | (1 << i);
}
๐ ๋นํธ๊ฐ ์ญ์ ํ๊ธฐ
: NOT ์ฐ์ฐ์๋ฅผ ์ด์ฉํด 00010000 ์ 11101111 ์ ๊ฐ์ด ๋ง๋ ๋ค num๊ณผ AND ์ฐ์ฐ
: ๋๋จธ์ง ๋นํธ์ ๊ฐ์ ๋ณํ์ง ์์ ์ฑ i ๋ฒ์งธ ๋นํธ๊ฐ๋ง ์ญ์ ๋จ
int clearBit(int num, int i) {
int mask = ~(1 << i);
return num & mask;
}
: ์ต์์ ๋นํธ์์ i๋ฒ์งธ ๋นํธ๊น์ง ๋ชจ๋ ์ญ์ ํ๋ ค๋ฉด (1 << i) ๋ก i๋ฒ์งธ ๋นํธ๋ฅผ 1๋ก ์ธํ ํ ๋ค ์ด ๊ฐ์์ 1์ ๋บ๋ค
: i๋ฒ์งธ ๋นํธ ๋ฐ์ ๋ชจ๋ 1๋ก ์ธํ ๋๊ณ ๊ทธ ์๋ก๋ ๋ชจ๋ 0์ผ๋ก ์ธํ
: mask ๊ฐ๊ณผ num์ AND ์ฐ์ฐํ๋ค๋ฉด ํ์ i๊ฐ์ ๋นํธ๋ฅผ ๋บ ๋๋จธ์ง ๋นํธ๋ฅผ ๋ชจ๋ ์ญ์ ํ ์ ์์
int clearBitMSBthroughI(int num, int i) {
int mask = (1 << i) - 1;
return num & mask;
}
: i ๋ฒ์งธ ๋นํธ์์ 0๋ฒ์งธ ๋นํธ๊น์ง ๋ชจ๋ ์ญ์ ํ๋ ค๋ฉด ๋ชจ๋ ๋นํธ๊ฐ 1๋ก ์ธํ ๋ -1์ ์ผ์ชฝ์ผ๋ก i + 1๋งํผ ์ํํธ ํ๋ค
: i๋ฒ์งธ ๋นํธ ์๋ก๋ ๋ชจ๋ 1๋ก ์ธํ ๋๊ณ ํ์ i๊ฐ ๋นํธ๋ ๋ชจ๋ 0์ผ๋ก ์ธํ ๋จ
int clearBitsIthrough0(int num, int i) {
int mask = (-1 << (i + 1));
return num & mask;
}
๐ ๋นํธ๊ฐ ๋ฐ๊พธ๊ธฐ
: i๋ฒ์งธ ๋นํธ๊ฐ์ v๋ก ๋ฐ๊พธ๊ณ ์ถ๋ค๋ฉด, ์ฐ์ 11101111์ ๊ฐ์ ๊ฐ์ ์ด์ฉํด i๋ฒ์งธ ๋นํธ๊ฐ์ ์ญ์ ํด์ผ ํจ
: ๋ฐ๊พธ๊ณ ์ ํ๋ ๊ฐ v๋ฅผ ์ผ์ชฝ์ผ๋ก i๋ฒ ์ํํธ ํ๋ค
: i๋ฒ์งธ ๋นํธ๊ฐ์ v๊ฐ ๋ ๊ฒ์ด๊ณ ๋๋จธ์ง๋ ๋ชจ๋ 0์ด ๋ ๊ฒ์ด๋ค
: ๋ง์ง๋ง์ผ๋ก OR ์ฐ์ฐ์ ์ด์ฉํด i๋ฒ์งธ ๋นํธ๊ฐ์ v๋ก ๋ฐ๊ฟ์ค๋ค
int updateBit(int num, int i, boolean bitIs1) {
int value - bitIs1 ? 1 : 0;
int mask = ~(1 << i);
return (num & mask) | (value << i);
}
๐ซง 2์ ๋ณด์, ์์
: ์ปดํจํฐ๊ฐ ์ ์๋ฅผ ์ ์ฅํ ๋๋ ๋๋ถ๋ถ 2์ ๋ณด์ ํํ๋ก ์ ์ฅ

: ์์๋ฅผ ๋ํ๋ด๊ธฐ ์ํด์๋ ๊ธฐ์กด์ ์์์ ๋นํธ๋ฅผ ๋ค์ง์ ๋ค์(1์ ๋ณด์) 1์ ๋ํด์ฃผ๋ฉด ๋๋๋ฐ, ์ด๋ ๊ธฐ์กด์ ์๋ฅผ 2์ ๋ณด์ ํํ์ ์ด์ฉํด์ ์์๋ก ๋ํ๋ธ ๊ฒ

๐ซง ์ฐ์ ์ํํธ, ๋ ผ๋ฆฌ ์ํํธ
: ๋นํธ๋ฅผ 1bit์ฉ ๋ฐ๋ฉด์ ์๊ธด ๋น์๋ฆฌ์ ์๋ก์ด bit๋ฅผ ์ฑ์์ฃผ๋ ์ฐ์ฐ

๐ซง ๊ธฐ๋ณธ ์ฐ์ฐ
- NOT [~] : 1์ด๋ฉด 0, 0์ด๋ฉด 1
- OR [|] : ๋ ๊ฐ ์ค 1์ด ํ๋๋ผ๋ ์๋ค๋ฉด 1, ์๋๋ฉด 0
- ํฉ์งํฉ ๊ฐ๋ ๊ณผ ์ ์ฌํ๋ค.
- XOR [^] : ๋ ๊ฐ์ด ๋ค๋ฅด๋ฉด 1, ๊ฐ์ผ๋ฉด 0
- ์ค์ ๋ก๋ XOR์ ๋ค์ด๊ฐ๋ ๊ฐ ์ค 1์ ๊ฐฏ์๊ฐ ํ์๊ฐ์ด๋ฉด 1
- AND [&] : ๋ ๊ฐ ๋ชจ๋ 1์ด๋ผ๋ฉด 1, ์๋๋ฉด 0
- ๊ต์งํฉ ๊ฐ๋ ๊ณผ ์ ์ฌํ๋ค.
- SHIFT [<< >>] : ๋นํธ ๋จ์๋ก ํ ์นธ์ฉ ๋ฏธ๋ ์ฐ์ฐ
๐ซง ํจ์ ๊ตฌํ
- Get : ํน์ ์์น์ ๋นํธ ๊ฐ์ ๊ฐ์ ธ์จ๋ค.
- Set : ํน์ ์์น์ ๋นํธ ๊ฐ์ ์ธํ ํ๋ค.
- Count : ์ธํ ๋ ๋นํธ ๊ฐ์ด ๋ช ๊ฐ์ธ์ง ๋ฐํํ๋ค.
- Clear : ๋นํธ๋ฅผ 0์ผ๋ก ์ด๊ธฐํ ํ๋ค.
- Toggle : ๋นํธ๋ฅผ ๋ฐ์ ์ํจ๋ค.
- MSB : ์ต์์ ๋นํธ๋ฅผ ์ฐพ๋๋ค.
- LSB : ์ตํ์ ๋นํธ๋ฅผ ์ฐพ๋๋ค.
๐ซง ๋นํธ๋ง์คํฌ(BitMask)
: ์ฌ๋ฌ ํํ ์ ๋นํธ๋ฅผ ์ด์ฉํ์ฌ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ์ ์ค์ด๊ณ ํจ์จ์ ์ผ๋ก ํํํ ์ ์๋ค
ex) ์งํฉ {1,2,3,5}๊ฐ ์์ ๋ 11101๋ก ๋ํ๋ผ ์ ์๊ณ ์ ์ฅํ ๋๋ 10์ง์๋ก 29๋ฅผ ์ ์ฅํ๋ฉด ๋๋ค
: ๋ฐฐ์ด์ ์ด์ฉํ ํ์์์ด ์ ์ ํ๋๋ง์ผ๋ก ์ ์ฅ์ด ๊ฐ๋ฅํ๋ฏ๋ก ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ์ ์ค์ผ ์ ์๋ค
'๐ฉโ๐ป ์ปดํจํฐ ๊ตฌ์กฐ > Computer Science' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Coding Interview University] ์ด์ง ํ์ ํธ๋ฆฌ : ์ด๋ก ๋ฐ ๊ตฌํ (0) | 2023.07.12 |
---|---|
[Coding Interview University] ํธ๋ฆฌ : ์ด๋ก ๋ฐ ๊ตฌํ (0) | 2023.07.11 |
[Coding Interview University] ์ด์งํ์ : ์ด๋ก ๋ฐ ๊ตฌํ (0) | 2023.07.07 |
[Coding Interview University] ํด์ํ ์ด๋ธ : ์ด๋ก ๋ฐ ๊ตฌํ (0) | 2023.07.05 |
[Coding Interview University] ํ : ์ด๋ก ๋ฐ ๊ตฌํ (0) | 2023.07.03 |