내가 제출한 답
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 다음의 공백을 반환.
'Web > Algorithm' 카테고리의 다른 글
2019 카카오 개발자 겨울 인턴십) 크레인 인형뽑기 게임 (0) | 2020.12.04 |
---|---|
[프로그래머스 > 해시] 베스트 앨범 (0) | 2020.06.23 |
[ 프로그래머스 > 정렬 ]H-Index (0) | 2020.04.25 |
[ 프로그래머스 > 해시] 위장 (0) | 2020.04.23 |
[ 프로그래머스 > 해시] 완주하지 못한 선수 (0) | 2020.04.23 |