File tree Expand file tree Collapse file tree 1 file changed +50
-0
lines changed Expand file tree Collapse file tree 1 file changed +50
-0
lines changed Original file line number Diff line number Diff line change
1
+ /**
2
+ * @param {number } n
3
+ * @return {number[] }
4
+ */
5
+ var countBits = function ( n ) {
6
+ const arr = [ 0 ] ;
7
+
8
+ for ( let i = 1 ; i <= n ; i ++ ) {
9
+ const num = binary ( i ) ;
10
+ arr . push ( num ) ;
11
+ }
12
+
13
+ return arr ;
14
+ } ;
15
+
16
+ /** ์ฑ๋ฅ์ด ๋๋ฆฌ์ง๋ง ๊ฐ๊ฒฐํ ํจ์ */
17
+ function binary ( n ) {
18
+ return n . toString ( 2 ) . split ( '' ) . filter ( ( el ) => el === '1' ) . length ;
19
+ }
20
+
21
+ // ์๊ฐ๋ณต์ก๋ O(n2) -> n์ ์ด์ง์๋ฌธ์์ด๋ก ๋ณํํ๊ณ ์ด๋ฅผ ๋ฒผ์ดํํ์ฌ 1์ธ ์์๋ง ํํฐ๋งํ๊ณ ๊ทธ ๊ฒฐ๊ณผ์ ๊ธธ์ด๋ฅผ ๊ตฌํ๋ค.
22
+ // ์ฌ๊ธฐ์ filter๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐฐ์ด์ ํ ๋ฒ ์ํํ๊ธฐ ๋๋ฌธ์ for๋ฌธ๊ณผ ์ค์ฒฉ๋์ด 2์ค ๋ฃจํ์ ์๊ฐ๋ณต์ก๋๋ฅผ ๊ฐ์ง
23
+
24
+ /** ์ฑ๋ฅ์ด ๋น ๋ฅด์ง๋ง ๋ณต์กํ ํจ์ */
25
+ function binary ( n ) {
26
+ let num = 1 ;
27
+ let count = 0 ;
28
+
29
+ while ( num * 2 <= n ) {
30
+ num = num * 2 ;
31
+ }
32
+
33
+ while ( 0 <= n ) {
34
+ if ( num <= n ) {
35
+ n = n - num ;
36
+ count ++ ;
37
+ }
38
+
39
+ if ( num === 1 ) {
40
+ break ;
41
+ }
42
+
43
+ num = num / 2 ;
44
+ }
45
+
46
+ return count ;
47
+ }
48
+
49
+ // ์๊ฐ๋ณต์ก๋ O(n2) -> for๋ฌธ ์์ while๋ฌธ์ด ๋๋ฉด์ i๊ฐ ์ด์ง์๋ก ๋ณํ๋ ๊ฒฝ์ฐ 1์ด ๋ช๊ฐ์ธ์ง ๋ฐํํ๊ธฐ ๋๋ฌธ์ 2์ค ๋ฃจํ์ ์๊ฐ๋ณต์ก๋๋ฅผ ๊ฐ์ง
50
+ // ๊ณต๊ฐ๋ณต์ก๋ O(n) -> for๋ฌธ์ ๋๋ฉด์ arr์ i๊ฐ ์ด์ง์๋ก ๋ณํ๋ ๊ฒฝ์ฐ 1์ด ๋ช ๊ฐ์ธ์ง ์์๋ก ์ถ๊ฐํจ
You canโt perform that action at this time.
0 commit comments