요약 : 2진법으로 변환한 값에서 1과 1사이에 0의 최대 갯수를 구해라
// you can write to stdout for debugging purposes, e.g.
// console.log('this is a debug message');
function solution(N) {
// write your code in JavaScript (Node.js 8.9.4)
answer = 0;
const arr =N.toString(2).split('');
let pivot = 0;
let cnt = 0;
let maxCnt= -100;
let checkAva = 0;
while(pivot !== (arr.length-1)){
if(arr[pivot] === '1') {
if(pivot !== 0) checkAva = 1;
pivot++;
cnt=0;
}
if(arr[pivot] === '0'){
pivot++;
cnt++;
if(maxCnt < cnt){
maxCnt = cnt;
}
}
}
maxCnt <= 0 || checkAva === 0 ? answer = 0 : answer = maxCnt
return answer;
}
2진수로 변환.
탐색하는 pivot
으로 1이있으면 cnt
를 0으로 초기화
( checkAva
: 문제 조건에서 1로 닫힌 이진수가 없으면 무조건 0을 반환해야 하므로 닫힘여부를 판단)
0이면 pivot
과 cnt
같이 증가 후, 최대값을 구함
하다가 split('1')로 하는 방법을 떠올렸는데, 이후에 어떻게 해야할지 생각이 안나 일일이 비교하는 방법으로 진행했다.
function solution(N) {
const binaryNum = N.toString(2); // 1
const binaryGaps = binaryNum.slice(binaryNum.indexOf('1') + 1, binaryNum.lastIndexOf('1')); // 2
const zeroCounted = binaryGaps.split('1').map(zeros => zeros.length); // 3
return zeroCounted.length ? Math.max(...zeroCounted) : 0;
}
출처: https://im-developer.tistory.com/178 [Code Playground]
2진법으로 변환
맨처음과 양끝의 1을 제거
1을 기준으로 나누고(split
) 각 배열의 길이를 zeroCounted
에 담는다 (배열형식)
배열의 각 원소에서 최댓값을 구한다.