Algorithm: Zero gap 길이 찾기

버들비·2021년 4월 6일
0

자연수 입력 N 에 대해서, N을 이진법으로 표현했을때 1과 1사이에 0이 연속적으로 들어가는 횟수를 zero gap 이라고 하자. 이때 zero gap 길이중 가장 큰 값을 출력하는 함수를 작성하시오.
ex) 9는 이진법으로 1001, 출력값은 2. 1041은 출력값 5.

Solution

function solution(N) {
  let q = N;
  let remainder;
  let reverseBinary = [];
  let flag = false;
  let count = 0;
  let candidate = [];
  
  // Convert N to binary (reverse order)
  while (q != 0) {
    remainder = q % 2;
    q = Math.floor(q / 2);
    reverseBinary.push(remainder);
  }
  
  // Measure Zero gap length.
  if (reverseBinary[0] == 1) {
    for (let i = 0; i < reverseBinary.length; i++) {
      if (reverseBinary[i] == 0) {
        count = count + 1;
      } else {
        candidate.push(count);
        count = 0;
      }
    }
  } else {
    for (let i = 0; i < reverseBinary.length; i++) {
      if (reverseBinary[i] == 1) {
        flag = true;
      }
      if (flag) {
        if (reverseBinary[i] == 0) {
          count = count + 1;
        } else {
          candidate.push(count);
          count = 0;
        }
      }
    }
  }

  // Return maximum value
  return Math.max(
    ...candidate.map((ele) => {
      return ele * 1;
    })
  );
}

0개의 댓글