위코드 코드카타를 정리한 내용입니다.
양수 N 을 이진법으로 바꾸었을 때 연속으로 이어지는 0의 갯수가 가장 큰 값을 리턴합니다. 이어지는 0은 1과 1사이의 것을 말합니다.
// input
529
// output
4
// 529의 이진수는 1000010001 이므로 4와 3을 비교해 더 큰 값인 4를 리턴
(정확한 풀이는 아닙니다.) 입력된 숫자를 toString() 메서드를 사용해 이진수로 변형하고 해당 숫자를 돌려 1이 나온 값의 인덱스 값을 빈 배열에 담습니다. 이 배열에 담긴 인덱스 값의 차이를 사용해 그 사이 0의 갯수를 구합니다.
입력된 숫자를 toString(2) 를 적용해 이진수로 변형하고, 1이란 숫자의 인덱스 값을 담을 빈배열과, 그렇게 구한 인덱스 값으로 계산한 0의 갯수를 담을 빈배열을 선언합니다.
const solution = num => {
let numTwo = num.toString(2);
let oneIndex = [];
let numFromIndex = [];
첫번째 반복문을 돌며 1 이 나올 경우 해당 인덱스를 oneIndex 배열에 담고
const solution = num => {
let numTwo = num.toString(2);
let oneIndex = [];
let numFromIndex = [];
for (let i = 0; i < numTwo.length; i++) {
if (numTwo[i] === "1") {
oneIndex.push(i);
}
}
두번째 반복문을 돌며 oneIndex 배열 값의 차이를 numFromIndex 배열에 담습니다. 그리고 해당 배열안에서 가장 큰 값은 Math.max() 함수에 전개구문으로 배열을 넣어서 구해줍니다.
const solution = num => {
let numTwo = num.toString(2);
let oneIndex = [];
let numFromIndex = [];
for (let i = 0; i < numTwo.length; i++) {
if (numTwo[i] === "1") {
oneIndex.push(i);
}
}
for (let j = 0; j < oneIndex.length - 1; j++) {
numFromIndex.push(oneIndex[j + 1] - oneIndex[j] - 1)
}
return Math.max(...numFromIndex);
}