양수 N을 이진법으로 바꿨을 때, 연속으로 이어지는 0 중에서 가장 큰 값을 return해 주세요.
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을 반환한다.