양수 N을 이진법으로 바꿨을 때, 연속으로 이어지는 0의 갯수가 가장 큰 값을 return해 주세요.
이어지는 0은 1과 1사이에 있는 것을 의미합니다.
1과 1사이에 있는 0을 binary gap 이라고 하겠습니다.
input: 9
output: 2
설명: 9의 이진수는 1001 입니다. 1과 1사이에 있는 0은 2 이므로, 2를 return
const solution = N => {
//2진법으로 바꾸기 .toString(2)
const num = N.toString(2);
console.log(num)
let temp = 0
let maxCount = 0
for (let i = 0; i < num.length; i++) {
if (Number(num.charAt(i)) === 0) {
temp++;
console.log('if temp->',temp)//1234 123
} else {
if (temp > maxCount) {
console.log('temp, maxCount->', temp, maxCount)//4 0
maxCount = temp;
console.log('else if maxCount',temp, maxCount)//4 4
}else{
console.log('else temp',temp)//0 4 3
temp = 0;
}
}
}
return maxCount;
}
//리펙토링
const solution = N => {
//2진수로 변경하기
let num = N.toString(2)//1000010001
//0만 짜르기
let cut = num.split(1)//[ '', '0000', '000', '' ]
let temp = []
//for ..of로 배열 순환하기
for (let i of cut) {
//temp에 cut을 하나씩 담는다
temp.push(i.length)//[ 0, 4, 3, 0 ]
console.log('i->', i)//'',0000,000,''
}
//pop으로 맨 뒷자리 제거
temp.pop()//[ 0, 4, 3 ]
// sort로 내림차순 정렬
temp.sort(function(a, b) {
return b-a//[ 4, 3, 0 ]
})
//첫번째 인덱스를 리턴
return temp[0]//4
}
console.log(solution(529))
진수변환
- 10진수를 진수 변환할때는 Number객체의 내장 함수인 toString()을 사용한다.
- 10진수 외의 다른 진수를 10진수로 변환할때는 전역 함수인 parseInt()을 사용한다.