양수를 이진법으로 바꿨을 때, 1 사이 연속되는 0의 개수 중 가장 큰 값을 구하자.
우선 들어온 양수를 toString 메소드를 통해 2진수로 변환하고,
문자열을 하나하나씩 쪼개서 배열에 저장했다.
해당 배열을 뒤에서 부터 찾아오는 방식으로 하고,
1이 등장하면 그 부분부터 잘라내 해당 배열의 length를 maxNum 배열에 넣었다.
그 후 맨 뒤에 다시 1을 넣어주면서 1과 1사이의 0을 셀 수 있도록 했다.
그렇게 진행이 되고, map 메소드를 사용해서 1의 값을 제외하기 위해 2를 빼고,
그 중에서 가장 큰 값을 찾아 값을 반환했다.
해당 로직은 맨 뒤에 32 (10000) 나 20 (10100) 같은 환경에서는
제대로 된 결과값을 반환하지 못했다.
일단 시작은 같다.
들어온 양수를 이진수로 변환 시켜주고, num이라는 변수를 설정해서
마지막부터 시작해 1을 찾아 해당 인덱스 값을 넣어주었다.
그 후, 32와 같이 맨 앞에 1만 있고, 아무것도 없는 숫자들을 타깃해
num이 0이면 num값을 반환했다.
그게 아니면 마지막 1이 등장하는 뒷부분을 잘라내고
위에 있는 코드와 진행방식을 같게 해줬다.
뒤를 잘라내주는 이유는 (101000) 일 때, 뒤에 1이 안붙으면 의미가 없어서 잘랐다.
그리고는 map
함수를 돌렸는데 이번에는 1만 빼줬다.
그렇게 해서 배열에서 가장 큰수를 반환하는 코드를 짰다.
코드카타를 진행하면서 주어진 값에만 맞추려다 보니
중간 중간 오류가 발생하는 경우가 종종 생기는데,
어떤 값이 들어오던 다 만족 할 수 있는 코드를 짤 수 있도록 해야겠다.