Codility No.1 (BinaryGap)

코딜리티라는 웹사이트가 있습니다.
알고리즘을 만드는 실력을 기르는 사이트인데요.
저도 틈틈히 하고 있습니다.
오늘은 그 중 첫번째인 BinaryGap에 대해 알아봅시다.
먼저 문제입니다.
답은 정해져있지 않으며, 여기에 적은 답은 예시 중 하나일 뿐입니다.

문제


임의의 숫자 N을 넣습니다. (ex: 529)
이를 이진수로 만들면 1000010001이 됩니다.
여기서, 1과 1사이의 0의 수를 세되, 제일 값이 높은(= 사이 0의 개수가 많은) 숫자를 반환합니다.
파라미터 N은 1부터 int max(32비트 기준. 2,147,483,647)까지를 입력할 수 있습니다.


첫번째 문제인 만큼 쉬운 문제입니다.

Jell의 답

function solution(N) {
  let dex = N.toString(2) // 우선 주어진 integer를 2진수로 나눕니다.
  var answer = 0 // 제출할 답의 변수를 지정합니다.
  var count = 0 // 각 사이의 0의 개수를 임시로 저장할 변수를 지정합니다.
  for(let index = 0; index < dex.length; index++) { // toString()에서 알 수 있듯, dex는 string형을 가집니다. 이를 하나씩 읽게 됩니다.
    let value = dex[index] // dex의 index번째 문자를 지정합니다.
    if(value === '0') { // 만약 dex의 index번째 문자가 0이라면?
      count++ // count를 늘립니다.
    } else {
      // 혹시 0이 아니라면 (풀고보니 생각난 건데 여기서는 else if (value === '1')로 하는 것이 더 정확할 수도 있겠네요)?
      if (count > answer) { // 임시 저장 변수가 제출할 답보다 크다면?
        answer = count // 제출할 답을 임시 저장 변수로 바꿔줍니다.
      }
      count = 0 // 두 수의 크기가 끝났으니 임시 저장변수를 초기화해줍니다. else로 하는 방법도 있습니다.
    }
  }
  return answer // 모든 계산이 끝나고, 답을 제출합니다.
}

다시 한 번 말씀드리지만, 이것은 예시 중 하나일 뿐입니다.
여러분의 방법대로도 만들어보세요!

© 2020 Jell, Built with Gatsby