|
| 1 | +/* |
| 2 | +solution 1. bit operation |
| 3 | +# Time Complexity: O(1) |
| 4 | + - n์ ์ฌ์ด์ฆ๋ 32 bit๋ก ์ผ์ |
| 5 | + - 2 * 32 ํ ์ฐ์ฐ ํ์ |
| 6 | +# Space Complexity: O(1) |
| 7 | +
|
| 8 | +bit๋ฅผ ํ๋์ฉ ์ผ๋ค. |
| 9 | +
|
| 10 | +
|
| 11 | +solution 2. bit operation (advanced) |
| 12 | +# Time Complexity: O(1) |
| 13 | + - 2 * b ํ ์ฐ์ฐ ํ์ (b๋ 1์ธ bit์ ๊ฐ์) |
| 14 | +# Space Complexity: O(1) |
| 15 | +
|
| 16 | +n &= (n - 1) ์ฐ์ฐ์ ํตํด, ๋ง์ง๋ง bit๋ฅผ ํ๋ฒ์ ํ๋์ฉ ์ ๊ฑฐํ๋ฉด์ bit๋ฅผ ์ผ๋ค. |
| 17 | +1์ธ bit์ ๊ฐ์๋งํผ ์ฐ์ฐ์ ํ๋ฏ๋ก, ํ๊ท ์ ์ผ๋ก solution 1๋ณด๋ค๋ ์ฐ์ฐ ํ์๊ฐ ์ ๋ค. |
| 18 | +
|
| 19 | +
|
| 20 | +solution 3. 8-bit chunk lookup table |
| 21 | +# Time Complexity: O(n) |
| 22 | + - n / 8 ํ ์ฐ์ฐ ํ์ |
| 23 | +# Space Complexity: O(1) |
| 24 | + - 2^8 ์ฌ์ด์ฆ์ int ๋ฐฐ์ด ์ฌ์ฉ |
| 25 | +
|
| 26 | +์ด์ง์ 00000000 ~ 11111111 ์ ๋ํด์, ๊ฐ ์์ bit 1์ด ๋ช ๊ฐ ๋ฑ์ฅํ๋์ง ๋ฏธ๋ฆฌ lookup table์ ์ ์ฅํด๋๋ค. |
| 27 | +๊ทธ๋ฆฌ๊ณ n์ 8 bit ๋จ์๋ก ์๋ผ์, loopup table์์ ์กฐํํ์ฌ ๋์ ํด์ค๋ค. |
| 28 | +์ฐ์ฐ ํ์๊ฐ n / 8๋ก ์ค์ด๋ ๋ค๋ ์ฅ์ ์ด ์์ผ๋, lookup table์ ๋ฏธ๋ฆฌ ๊ณ์ฐํ๊ฑฐ๋ ๋ฐํ์์ ๊ณ์ฐํด์ผ ํ๊ณ , lookup table ์ฌ์ด์ฆ๋งํผ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋ ์ฌ์ฉํด์ผ ํ๋ค๋ ํธ๋ ์ด๋ ์คํ๊ฐ ์๋ค. |
| 29 | +
|
| 30 | +
|
| 31 | +solution 4. population count ์๊ณ ๋ฆฌ์ฆ |
| 32 | +# Time Complexity: O(1) |
| 33 | + - 5 ํ ์ฐ์ฐ ํ์ |
| 34 | +# Space Complexity: O(1) |
| 35 | +
|
| 36 | +๊ฐ ๋จ๊ณ๋ฅผ ์งํํ ๋๋ง๋ค, 2, 4, 8, 16, 32 bit chunk ์์ 1 bit์ ๊ฐ์๋ฅผ ์ผ๋ค. |
| 37 | +
|
| 38 | +
|
| 39 | +solution 5. ์๋ฐ ๋ด์ฅ ํจ์ Integer.bitCount() ์ฌ์ฉ |
| 40 | +# Time Complexity: O(1) |
| 41 | +# Space Complexity: O(1) |
| 42 | +
|
| 43 | +*/ |
| 44 | +class Solution { |
| 45 | + // solution 1 |
| 46 | + // public int hammingWeight(int n) { |
| 47 | + // int ans = 0; |
| 48 | + // while (n > 0) { |
| 49 | + // ans += (n & 1); |
| 50 | + // n >>= 1; |
| 51 | + // } |
| 52 | + // return ans; |
| 53 | + // } |
| 54 | + |
| 55 | + // solution 2 |
| 56 | + // public int hammingWeight(int n) { |
| 57 | + // int ans = 0; |
| 58 | + // while (n > 0) { |
| 59 | + // n &= (n - 1); // ์ตํ์ 1๋นํธ๋ฅผ ์ ๊ฑฐ |
| 60 | + // ans++; |
| 61 | + // } |
| 62 | + // return ans; |
| 63 | + // } |
| 64 | + |
| 65 | + // solution 3. |
| 66 | + // lookup table (8-bit ๋จ์๋ก) |
| 67 | + // ์ด ์์ด๋์ด๋ ์๊ฐ์ด ๋ถ์กฑํด์ ๊ตฌํํ์ง ๋ชปํ์ต๋๋ค. |
| 68 | + |
| 69 | + |
| 70 | + // solution 4. |
| 71 | + // population count ์๊ณ ๋ฆฌ์ฆ |
| 72 | + // https://blog.naver.com/jinhan814/222540111549 |
| 73 | + // http://shumin.co.kr/algorithm-hamming-weight-bit-count/ |
| 74 | + public int hammingWeight(int n) { |
| 75 | + n = (n >> 1 & 0x55555555) + (n & 0x55555555); |
| 76 | + n = (n >> 2 & 0x33333333) + (n & 0x33333333); |
| 77 | + n = (n >> 4 & 0x0F0F0F0F) + (n & 0x0F0F0F0F); |
| 78 | + n = (n >> 8 & 0x00FF00FF) + (n & 0x00FF00FF); |
| 79 | + n = (n >> 16 & 0x0000FFFF) + (n & 0x0000FFFF); |
| 80 | + return n; |
| 81 | + } |
| 82 | + |
| 83 | + // solution 5. |
| 84 | + // ์๋ฐ ๋ด์ฅ ํจ์ ์ฌ์ฉ O(logn) |
| 85 | + // public int hammingWeight(int n) { |
| 86 | + // return Integer.bitCount(n); |
| 87 | + // } |
| 88 | +} |
0 commit comments