이진수 가장 큰 binary gap 구하기, 자바스크립트

라용·2022년 9월 26일
0

위코드 - 스터디로그

목록 보기
58/100

위코드 코드카타를 정리한 내용입니다.

문제

양수 N 을 이진법으로 바꾸었을 때 연속으로 이어지는 0의 갯수가 가장 큰 값을 리턴합니다. 이어지는 0은 1과 1사이의 것을 말합니다.

// input 
529

// output
4
// 529의 이진수는 1000010001 이므로 4와 3을 비교해 더 큰 값인 4를 리턴

풀이

(정확한 풀이는 아닙니다.) 입력된 숫자를 toString() 메서드를 사용해 이진수로 변형하고 해당 숫자를 돌려 1이 나온 값의 인덱스 값을 빈 배열에 담습니다. 이 배열에 담긴 인덱스 값의 차이를 사용해 그 사이 0의 갯수를 구합니다.

입력된 숫자를 toString(2) 를 적용해 이진수로 변형하고, 1이란 숫자의 인덱스 값을 담을 빈배열과, 그렇게 구한 인덱스 값으로 계산한 0의 갯수를 담을 빈배열을 선언합니다.

const solution = num => {
  let numTwo = num.toString(2);
  let oneIndex = [];
  let numFromIndex = [];

첫번째 반복문을 돌며 1 이 나올 경우 해당 인덱스를 oneIndex 배열에 담고

const solution = num => {
  let numTwo = num.toString(2);
  let oneIndex = [];
  let numFromIndex = [];
  
  for (let i = 0; i < numTwo.length; i++) {
    if (numTwo[i] === "1") {
      oneIndex.push(i);
    }
  }

두번째 반복문을 돌며 oneIndex 배열 값의 차이를 numFromIndex 배열에 담습니다. 그리고 해당 배열안에서 가장 큰 값은 Math.max() 함수에 전개구문으로 배열을 넣어서 구해줍니다.

const solution = num => {
  let numTwo = num.toString(2);
  let oneIndex = [];
  let numFromIndex = [];
  
  for (let i = 0; i < numTwo.length; i++) {
    if (numTwo[i] === "1") {
      oneIndex.push(i);
    }
  }
  
  for (let j = 0; j < oneIndex.length - 1; j++) {
    numFromIndex.push(oneIndex[j + 1] - oneIndex[j] - 1)
  }
  return Math.max(...numFromIndex);
}
profile
Today I Learned

0개의 댓글