본문 바로가기

Web/Algorithm

비트 카운팅 알고리즘

내가 제출한 답

var countBits = function(n) { 
let result = [];
 let count = 0;
 while(n > 1){
 result.push(n%2); n = Math.floor(n/2); 
} 
result.push(n); 
result.forEach((elem) => { 
if( elem === 1) count++; 
}); 
return count; };

저리 간단한 걸 왜 더 어렵게 푼 것 같지.

countBits = n => n.toString(2).split('0').join('').length;

---------------★문법 다시 체크-----------------

먼저, 숫자.toString(2)는 숫자를 2진수 문자열로 바꾼다.

split('0')으로 문자열 안의 0을 기준으로 (0을 만나면 0 앞까지 하나의 덩어리로)분할해 배열로 변환해준다.

split을 하면 배열 데이터 중간 중간에 공백이 생김.

join('')으로 공백을 기준으로 다시 문자열로 변환해준다.

중간에 빈 문자열""이 들어간 이유는 00처럼 0이 연달아 나오면 0과0사이에 아무것도 없었기 때문이고,

구분자가 마지막에도 등장하면 배열 마지막 인덱스에 공백문자열이 들어감.

즉 10011010010 색칠한 두곳에 빈문자열이 들어갔기 때문에 1번 인덱스와 4번 6번에 빈문자열이 들어감.

또 까먹었을 미래의 나를 위해,

1000101011100 앞의 진한 주황색은 0이 세번 연달아 나왔고 0 사이의 공백이 둘이라 1번2번 인덱스에 공백이 들어간다. 뒤의 주황색은 00사이의 공백과 마지막 0 다음의 공백을 반환.