Binary gap의 최댓값을 구하는 문제이다.
Binary gap은 이진수에서 1로 둘러싸인 연속된 0의 개수이다.
예)
1. 9는 이진수로 1001이다. binary gap은 2이다.
2. 529는 이진수로 1000010001이다. binary gap은 4와 3으로 총 2개이다.
3. 20은 이진수로 10100이다. binary gap은 1이다.
4. 15는 이진수로 1111이다. binary gap은 없다.
5. 32는 이진수로 100000이다. binary gap은 없다.
양의 정수 N이 주어진다.
가장 긴 binary gap을 반환해야한다.
binary gap이 없다면 0을 반환해야한다.
function solution(N) {
const binaryN = N.toString(2); //2진수 문자열로 변환
let binaryGap = 0;
let answer = 0;
for (let i = 1; i < binaryN.length; i++) {
if (binaryN[i] === '0') {
binaryGap++;
}
else {
answer = Math.max(binaryGap, answer);
binaryGap = 0;
}
}
return answer;
}
binaryN[0]은 무조건 1이므로 binaryN[1]부터 검사한다.
for문과 if문을 js스럽게 쓰지 않은 것 같다.
하지만 직관적으로 푼 것 같다.