WeCode Kata Day 16

luneah·2021년 12월 20일
0

WeCode Kata

목록 보기
16/20
post-thumbnail

문제

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

이어지는 0은 1과 1사이에 있는 것을 의미한다. 1과 1 사이에 있는 0을 binary gap 이라고 하자.

input: 9
output: 2
설명: 9의 이진수는 1001 이다. 11사이에 있는 02 이므로, 2return

input: 529
output: 4
설명: 529의 이진수는 1000010001 이다. binary gap은 43 두개가 있다.
이 중 큰 값은 4이므로 4return

input: 20
output: 1
설명: 20의 이진수는 10100 이다. 11사이에 있는 연속된 0의 수는 1 뿐이다.
(뒤에 있는 01사이에 있는 것이 아니므로)

input: 15
output: 0
설명: 15의 이진수는 1111 이다. binary gap이 없으므로 0return

input: 32
output: 0
설명: 32의 이진수는 100000 이다. binary gap이 없으므로 0return

Thinking Algorithm

  1. 정수 N을 2진수로 바꿔준다.
  2. 변경된 2진수에서 1을 기준으로 분할. 즉 101001인 경우 [ ‘’, ‘0’, ‘00’, ‘’ ]이 될 것.
  3. for 반복문을 돌리는데 0부터 1씩 증가하지만, length-1까지만 돌린다.
    ㄴ 마지막에 1이 있다면 빈 값을 array에 포함시킬 것이고 1이 없고 0이라면 마지막에는 빈 스트링이 없을 것이다. 즉 10100인 경우 [ ‘’, ‘0’, ‘00’ ]이 되니까 마지막을 제외시켜야 함.
  4. arr에서 가장 큰 값을 리턴하는데 마지막 요소는 포함되지 않는다.

Code

const solution = N => {
  let binary = N.toString(2);
  let arr = binary.split('1');
  let binaryGap = 0;

  for (let i=0; i<arr.length-1; i++) {
    if (arr[i].length === 0) {
      continue;
    } else {
      binaryGap = Math.max(binaryGap, arr[i].length);
    }
  }
  return binaryGap;
}
profile
하늘이의 개발 일기

0개의 댓글