Skip to content

Commit 8c2836e

Browse files
committed
feat: number-of-1bits solve
1 parent 56d86c3 commit 8c2836e

File tree

1 file changed

+44
-0
lines changed

1 file changed

+44
-0
lines changed
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
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+
}

0 commit comments

Comments
ย (0)