Algorithm - CodeKata #16 📌


1. Question


正数Nをバイナリに変更する場合は、連続する0の最大値を返します.
  • の後の0は、1と1の間を表す.
  • 1と1の間の0をバイナリgapと呼ぶ.
  • input: 9
    output: 2
    설명: 9의 이진수는 1001 입니다. 
    1과 1사이에 있는 0은 2 이므로, 2를 return
    input: 529
    output: 4
    설명: 529의 이진수는 1000010001 입니다. 
    binary gap은 4와 3 두개가 있습니다.
    이 중 큰 값은 4이므로 4를 return
    input: 20
    output: 1
    설명: 20의 이진수는 10100 입니다. 
    1과 1사이에 있는 연속된 0의 수는 1 뿐입니다.
    (뒤에 있는 0은 1사이에 있는 것이 아니므로)
    input: 15
    output: 0
    설명: 15의 이진수는 1111 입니다. 
    binary gap이 없으므로 0을 return
    input: 32
    output: 0
    설명: 32의 이진수는 100000 입니다. 
    binary gap이 없으므로 0을 return

    2. Answer

    const solution = N => {
      let binary = N.toString(2);
      const binaryArr = binary.split('1');
      let binaryGap = 0;
    
      for (let i = 0; i < binaryArr.length - 1; i++) {
        if (binaryArr[i].length === 0) {
          continue;
        } else {
          binaryGap = Math.max(binaryGap, binaryArr[i].length);
        }
      }
      
      return binaryGap;
    }
    
    console.log(solution(123));
    Ref.
    https://medium.com/akiakma/code-kata-14-binary-gap-48160e0ad6e