File tree Expand file tree Collapse file tree 1 file changed +44
-0
lines changed
Expand file tree Collapse file tree 1 file changed +44
-0
lines changed Original file line number Diff line number Diff line change 1+ class Solution {
2+ /**
3+ * ์ฃผ์ด์ง ์ซ์ n์ 2์ง์๋ก ๋ง๋ค๊ณ , ๊ฑฐ๊ธฐ์ ํฌํจ๋๋ 1์ ๊ฐ์๋ฅผ ์นด์ดํธํ์.
4+ *
5+ * ์๋ฆฌ: 2์ง์์์ 1์ ์๋ฏธ.
6+ * ํน์ ์ M์ด 2^k <= M < 2^(k+1)์ ๊ด๊ณ๋ฅผ ๊ฐ์ง ๋,
7+ * M์ด 2^k๋ก ๋๋ ๋จ์ด์ง๋ค๋ฉด k๋ฒ์งธ bit๋ 1๋ก ํํํ ์ ์๋ค.
8+ * Runtime: 1 ms (Beats 18.72%)
9+ * Memory: 42.17 MB (Beats 24.03%)
10+ * Space Complexity: O(1)
11+ * - 2์ ์ ๊ณฑ์ v์ k๋ฅผ ์ ์ฅํ๋ ๊ณต๊ฐ => O(1)
12+ * > O(1)
13+ * Time Complexity: O(N)
14+ * - 30ํ์ n์ v์ ๋น๊ต ๋ฐ ๋๋์
=> O(31)
15+ * > O(31) => O(1)
16+ */
17+ public int hammingWeight (int n ) {
18+ int ans = 0 ;
19+
20+ int maxExponatial = 1 << 30 ;
21+ // n >= 2^30์ผ ๋ ์๋ฅผ ์ค์ด๊ธฐ
22+ if (maxExponatial <= n ) {
23+ n = n - maxExponatial ;
24+ ans ++; // 2^31 ์ฌ์ฉํ๊ธฐ์ 1bit ์ถ๊ฐ
25+ }
26+
27+ int k = 29 ;
28+ int v = 1 << 29 ;
29+
30+ // ์ด 30๋ฒ ๋๊ธฐ
31+ while (k >= 0 ) {
32+ // v <= n ์ผ ๋, k๋ฒ์งธ bit๋ 1์ด๋ค.
33+ if (v <= n ) {
34+ n -= v ;
35+ ans ++;
36+ }
37+ // ํญ์ k์ v๋ฅผ ์ค์ด๊ธฐ.
38+ k --;
39+ v = v >> 1 ;
40+ }
41+ return ans ;
42+
43+ }
44+ }
You canโt perform that action at this time.
0 commit comments