이진법으로 바꾼뒤, 0의 갯수가 가장 큰 값 구하기

miin·2021년 12월 11일
0

Algorithm

목록 보기
3/14
post-thumbnail

문제

양수 N을 이진법으로 바꿨을 때, 연속으로 이어지는 0의 갯수가 가장 큰 값을 return해 주세요.

이어지는 0은 1과 1사이에 있는 것을 의미합니다.
1과 1사이에 있는 0을 binary gap 이라고 하겠습니다.

input: 9
output: 2

설명: 9의 이진수는 1001 입니다. 1과 1사이에 있는 0은 2 이므로, 2를 return

코드

const solution = N => {
  //2진법으로 바꾸기 .toString(2)
  const num = N.toString(2);
  console.log(num)
  let temp = 0
  let maxCount = 0

  for (let i = 0; i < num.length; i++) {
    if (Number(num.charAt(i)) === 0) {
      temp++;
      console.log('if temp->',temp)//1234 123
    } else {
      if (temp > maxCount) {
        console.log('temp, maxCount->', temp, maxCount)//4 0
        maxCount = temp;
        console.log('else if maxCount',temp, maxCount)//4 4
      }else{
      console.log('else temp',temp)//0 4 3
      temp = 0;
      }
    }
  }
  return maxCount;
}

//리펙토링
const solution = N => {
  //2진수로 변경하기
  let num = N.toString(2)//1000010001
  //0만 짜르기
  let cut = num.split(1)//[ '', '0000', '000', '' ]
  let temp = []

//for ..of로 배열 순환하기
  for (let i of cut) {
    //temp에 cut을 하나씩 담는다
    temp.push(i.length)//[ 0, 4, 3, 0 ]
    console.log('i->', i)//'',0000,000,''
  }

//pop으로 맨 뒷자리 제거
  temp.pop()//[ 0, 4, 3 ]
  // sort로 내림차순 정렬
  temp.sort(function(a, b) {     
    return b-a//[ 4, 3, 0 ]
  })

//첫번째 인덱스를 리턴           
  return temp[0]//4
}

console.log(solution(529))

풀이

진수변환

  • 10진수를 진수 변환할때는 Number객체의 내장 함수인 toString()을 사용한다.
  • 10진수 외의 다른 진수를 10진수로 변환할때는 전역 함수인 parseInt()을 사용한다.

0개의 댓글