Skip to content

Commit 8940ac5

Browse files
committed
counting-bits solution (py)
1 parent cc30a1f commit 8940ac5

File tree

1 file changed

+49
-0
lines changed

1 file changed

+49
-0
lines changed

โ€Žcounting-bits/hi-rachel.pyโ€Ž

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
"""
2+
์ •์ˆ˜ n์ด ์ฃผ์–ด์กŒ์„ ๋•Œ, 0๋ถ€ํ„ฐ n๊นŒ์ง€์˜ ๋ชจ๋“  ์ˆ˜์— ๋Œ€ํ•ด ๊ฐ ์ˆ˜๋ฅผ ์ด์ง„์ˆ˜๋กœ ํ‘œํ˜„ํ–ˆ์„ ๋•Œ 1์˜ ๊ฐœ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ๋ฌธ์ œ
3+
4+
TC: O(N log N), ๋ชจ๋“  ์ˆ˜ ์ˆœํ™˜ + ์ด์ง„์ˆ˜ ๋ณ€ํ™˜ ๊ณผ์ • (log i)
5+
SC: O(N)
6+
"""
7+
8+
from typing import List
9+
10+
# ์ฒ˜์Œ ํ’€์ด
11+
class Solution:
12+
def countBits(self, n: int) -> List[int]:
13+
def countOne(num):
14+
cnt = 0
15+
while True:
16+
rest = num % 2
17+
if rest == 1:
18+
cnt += 1
19+
num //= 2
20+
if num <= 1:
21+
if num == 1:
22+
cnt += 1
23+
break
24+
return cnt
25+
26+
result = []
27+
for i in range(0, n + 1):
28+
result.append(countOne(i))
29+
30+
return result
31+
32+
"""
33+
DP ํ’€์ด - ์‹œ๊ฐ„ ๋ณต์žก๋„ ๊ฐœ์„ 
34+
35+
bits[i] = bits[i >> 1] + (i &)
36+
i >> 1 ์€ i๋ฅผ ์˜ค๋ฅธ์ชฝ์œผ๋กœ 1๋น„ํŠธ ์ด๋™ -> i๋ฅผ 2๋กœ ๋‚˜๋ˆˆ ๊ฐ’
37+
i & 1 ์€ i์˜ ๋งˆ์ง€๋ง‰ 1๋น„ํŠธ๊ฐ€ 1์ธ์ง€ ํ™•์ธ, ์ง์ˆ˜๋ฉด 0, ํ™€์ˆ˜๋ฉด 1
38+
i์˜ 1์˜ ๊ฐœ์ˆ˜ = i๋ฅผ 2๋กœ ๋‚˜๋ˆˆ ์ˆ˜์˜ 1์˜ ๊ฐœ์ˆ˜ + ๋งˆ์ง€๋ง‰ ๋น„ํŠธ๊ฐ€ 1์ธ์ง€ ์—ฌ๋ถ€
39+
40+
TC: O(N)
41+
SC: O(N)
42+
"""
43+
44+
class Solution:
45+
def countBits(self, n: int) -> List[int]:
46+
dp = [0] * (n + 1)
47+
for i in range(1, n + 1):
48+
dp[i] = dp[i >> 1] + (i & 1)
49+
return dp

0 commit comments

Comments
ย (0)