Binary Gap

김현민·2021년 9월 8일
0

Algorithm

목록 보기
67/126
post-thumbnail

요약 : 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;
}
  1. 2진수로 변환.

  2. 탐색하는 pivot으로 1이있으면 cnt를 0으로 초기화
    ( checkAva : 문제 조건에서 1로 닫힌 이진수가 없으면 무조건 0을 반환해야 하므로 닫힘여부를 판단)

  3. 0이면 pivotcnt 같이 증가 후, 최대값을 구함

하다가 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]
  1. 2진법으로 변환

  2. 맨처음과 양끝의 1을 제거

  3. 1을 기준으로 나누고(split) 각 배열의 길이를 zeroCounted에 담는다 (배열형식)

  4. 배열의 각 원소에서 최댓값을 구한다.

profile
Jr. FE Dev

0개의 댓글