양의 정수, 예를 들어 n인 JavaScript 함수를 작성해야 합니다. 이 함수는 n의 이진 표현에서 두 개의 인접한 1 사이의 가장 긴 거리를 찾아서 반환해야 합니다.
두 개의 인접한 1이 없으면 0을 반환해야 합니다.
두 개의 1은 0으로만 구분되는 경우 인접합니다(0은 없을 수도 있음). 두 1 사이의 거리는 비트 위치 간의 절대 차이입니다. 예를 들어, "1001"에 있는 두 개의 1은 거리가 3입니다.
예를 들어 -
입력이 22이면 출력은 2,
왜냐하면,
- 22의 바이너리 코드는 10110입니다.
- 1의 첫 번째 인접한 쌍은 거리가 2인 "10110"입니다.
- 두 번째로 인접한 1 쌍은 거리가 1인 "10110"입니다.
- 답은 이 두 거리 중 가장 큰 거리인 2입니다.
"10110"은 밑줄이 그어진 두 개의 1을 구분하는 1이 있기 때문에 유효한 쌍이 아닙니다.
예시
const num = 22; const binaryGap = (num = 1) => { let last = -1; let ans = 0; // go through every bit for (let i = 0; i < 32; i++) { // check whether the bit is `1`. // if true, calculate the longest distance with // previous `1` if `1` was previously found. if ((num >> i) & 1 > 0) { if (last >= 0) { ans = Math.max(ans, i - last); } last = i; } } return ans; }; console.log(binaryGap(num));
출력
콘솔의 출력은 -
2