Skip to content

Commit 34f2189

Browse files
update post
1 parent 0f82241 commit 34f2189

File tree

1 file changed

+76
-1
lines changed

1 file changed

+76
-1
lines changed

_posts/2024-04-23-leetcode-338.md

Lines changed: 76 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,21 @@
22
layout: post
33
title: (Leetcode) 338 - Counting Bits
44
categories: [스터디-알고리즘]
5-
tags: [자바, java, 스트림, stream, 리트코드, Leetcode, 알고리즘, algorithm]
5+
tags:
6+
[
7+
자바,
8+
java,
9+
스트림,
10+
stream,
11+
리트코드,
12+
Leetcode,
13+
알고리즘,
14+
algorithm,
15+
array,
16+
bit,
17+
dp,
18+
dynamic programming,
19+
]
620
date: 2024-04-23 20:30:00 +0900
721
---
822

@@ -58,3 +72,64 @@ num 이 0 보다 클경우 shift를 이용하여 1인지 확인하고 1일 경
5872
## TC, SC
5973

6074
두 풀이의 시간 복잡도는 O(n \* log n)이고, 공간 복잡도는 O(n)이다. n \* log n 인 이유는 bit의 수는 log 를 따르게 되기 때문이다.
75+
76+
## dp로 풀어보기
77+
78+
```java
79+
public int[] countBits(int n) {
80+
int result[] = new int[n + 1];
81+
for (int i = 1; i <= n; i++) {
82+
result[i] = result[i >> 1] + (i & 1);
83+
}
84+
return result;
85+
}
86+
```
87+
88+
1씩 증가함에 따라 비트는 다음과 같이 진행이 된다.
89+
90+
0 = 0000
91+
1 = 0001
92+
2 = 0010
93+
3 = 0011
94+
4 = 0100
95+
5 = 0101
96+
6 = 0110
97+
7 = 0111
98+
...
99+
100+
마지막 bit가 0이 되었다가 1이 되는 것을 반복한다. 이 성질을 이요하면서 이전의 결과값을 이용하면서 마지막 비트의 변화를 관찰한다.
101+
102+
- result[0] = 0
103+
- result[1]
104+
- result[1 >> 1] = result[0] = 0
105+
- (0001 & 1) = 1
106+
- 0 + 1 = 1
107+
- result[2]
108+
- result[2 >> 1] = result[1] = 1
109+
- (0010 & 1) = 0
110+
- 1 + 0 = 1
111+
- result[3]
112+
- result[3 >> 1] = result[1] = 1
113+
- (0011 & 1) = 1
114+
- 1 + 1 = 2
115+
- result[4]
116+
- result[4 >> 1] = result[2] = 1
117+
- (0100 & 1) = 0
118+
- 1 + 0 = 1
119+
- result[5]
120+
- result[5 >> 1] = result[2] = 1
121+
- (0101 & 1) = 1
122+
- 1 + 1 = 1
123+
- result[6]
124+
- result[6 >> 1] = result[3] = 2
125+
- (0110 & 1) = 0
126+
- 2 + 0 = 2
127+
- result[7]
128+
- result[7 >> 1] = result[3] = 2
129+
- (0111 & 1) = 1
130+
- 2 + 1 = 3
131+
- ...
132+
133+
## TC, SC
134+
135+
두 풀이의 시간 복잡도는 O(n)이고, 공간 복잡도는 O(n)이다.

0 commit comments

Comments
 (0)