forked from DaleStudy/leetcode-study
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathhaklee.py
35 lines (29 loc) ยท 1.64 KB
/
haklee.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
"""TC: O(n), SC: O(n)
์์ด๋์ด:
- bin์ผ๋ก ๋ณํํ ๊ฐ์ ๊ธธ์ด๊ฐ k์ธ ๋ชจ๋ ์๋ค์ ๋ํ bit_count๊ฐ์ ์๊ณ ์๋ค๊ณ ํ์.
- ์ฌ์ค ์์ ์๋ค์ bin์ผ๋ก ๋ณํํ์๋ ๋งจ ์ ์๋ฆฌ๊ฐ 0์ผ๋ก ์์ํ๋ ๊ธธ์ด k+1์ ์๋ผ๊ณ ๋ณผ ์ ์๋ค.
- ๊ทธ๋ ๋ค๋ฉด bin์ผ๋ก ๋ณํํ์๋ ๋งจ ์ ์๋ฆฌ๊ฐ 1๋ก ์์ํ๋ ๊ธธ์ด k+1์ธ ์๋ค์ bit_count๋
๋งจ ์ ์๋ฆฌ๊ฐ 0์ผ๋ก ์์ํ๋ ์๋ค์ bit_count์ 1์ ๋ํ ๊ฒ์ด๋ผ๊ณ ํ ์ ์๋ค.
- ์์ ์์ด๋์ด๋ฅผ ํ์ฉํ๋ฉด ์ 2^k ์๋ค์ bit_count๋ฅผ ์๊ณ ์์ผ๋ฉด ๊ฐ๋จํ ๋ํ๊ธฐ ์ฐ์ฐ์ ํตํด
์ดํ 2^k ์๋ค์ bit_count๊ฐ๋ ์ ์ ์๋ค.
e.g.)
- 0, 1์ bit_count๊ฐ [0, 1]์ด๋ผ๋ฉด, 2, 3์ bit_count๋ [0+1, 1+1], ์ฆ, 0~3์ bit_count๋ [0, 1, 1, 2]
- 0~3์ bit_count๊ฐ [0, 1, 1, 2]๋ผ๋ฉด, 4~7์ bit_count๋ [1, 2, 2, 3], ์ฆ, 0~7์ bit_count๋
[0, 1, 1, 2, 1, 2, 2, 3]
- ...
- ๋ฆฌ์คํธ์ ํฌ๊ธฐ๋ฅผ 2๋ฐฐ์ฉ ๋๋ฆฌ๋ค๊ฐ n๋ณด๋ค ์ปค์ก์๋ ์ n๊ฐ์ ์์ดํ
๋ง ์ทจํด์ ๋ฆฌํด.
SC:
- ์๋์์ ๋ฆฌ์คํธ s์ ๊ธธ์ด๋ 2^(k-1) < n <= 2^k๋ฅผ ๋ง์กฑํ๋ 2^k๋งํผ ์ปค์ง๋ค.
- ์ฆ, O(n).
TC:
- s ์์ ๋ค์ด์๋ i๋ฒ์งธ ์์ดํ
์ ๊ณ์ฐํ ๋ ํ์ํ ์ฐ์ฐ์ ๋ง์
1ํ, ์ฆ, O(1).
- i๋ฒ์งธ ์์ดํ
๊ฐ์ ๊ตฌํ๊ธฐ ์ํด ๊ทธ ์์ ๊ฐ์ ๋ฏธ๋ฆฌ ๊ณ์ฐํด๋ ๊ฒ์ด๋ผ ์๊ฐํ ์ ์๋ค.
- SC ๋ถ์๊ณผ ๋น์ทํ๊ฒ, 2^(k-1) < n <= 2^k๋ฅผ ๋ง์กฑํ๋ 2^k๋งํผ ๋ฐ๋ณต. ์ฆ, O(n).
"""
class Solution:
def countBits(self, n: int) -> List[int]:
s = [0]
m = n * 2
while m := m >> 1:
s += [i + 1 for i in s]
return s[: n + 1]