CodeKata | Week 4 Day 1

Ssss·2021년 3월 1일
0

문제

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

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

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

첫 접근

const solution1 = N => {
  const arr = N.toString(2).split('1')
  const length = arr.map(str => str.length)
  return length.reduce(function(a,b){return Math.max(a,b)})
} 

결과: 응~ fail~ ㅋㅋㅋ 테스트문제 9개중에 7개 통과하고 2개를 fail 했다. 이유는 '32', '20'이라는 숫자가 들어갔을때

n.toString(2).split('1') // [ '', '', '', '', '0' ]
s.toString(2).split('1') // [ '', '0', '00' ]

여기서 다시보는 문제: 이어지는 0은 1과 1사이에 있는것을 의미합니다
조건을 걸어주지않았기 때문에 1과 1사이에 없는 0들의 숫자도 고려해버렸다,,,
다시 조건을 걸어주고 시도한다면

두번째 접근

const solution = N => {
  const arr = N.toString(2).split('1')
  arr.pop()
  arr.shift()
  if (arr.length > 0){
  const length = arr.map(str => str.length)
  return length.reduce(function(a,b){return Math.max(a,b)})
} else {return 0}}

통과!🙌
먼저 arr이라는 이진법으로 바꾸고 '1'로 split한 배열을 만들고, 맨앞과 맨뒤의 index에 있는 string을 없애고 만약 그래도 arr이라는 배열이 0보다 크다면 그 안에 있는 string중에 가장 큰 string의 숫자를 반환한다. 만약 arr이라는 배열이 0이라면, 0을 반환한다.

profile
Front-end Developer 👩‍💻

0개의 댓글