[LeetCode] Binary Gap

아르당·2026년 3월 5일

LeetCode

목록 보기
185/211
post-thumbnail

문제를 이해하고 있다면 바로 풀이를 보면 됨
전체 코드로 바로 넘어가도 됨
마음대로 번역해서 오역이 있을 수 있음

Problem

양의 정수 n이 주어졌을 때, n의 이진 표현에서 인접한 두 1 사이의 가장 긴 거리를 찾아서 반환해라. 인접한 1이 두 개 없으면 0을 반환해라.
두 개의 1은 0만 분리되어 있으면 인접할 수 있다(0은 없을 수도 있다). 두 1 사이의 거리는 비트 위치 간의 절대적인 차이이다. 예를 들어, "1001"은 두 1은 3의 거리를 갖는다.

Example

#1
Input: n = 22
Output: 2
Explanation: 22를 2진수로하면 "10110"이다.
첫 번째 인접한 1의 쌍은 거리가 2이다.
두 번째 인접한 1의 쌍은 거리가 1이다.
답은 두 거리 중 가장 큰 거리인 2이다.

#2
Input: n = 8
Output: 0
Explanation: 8을 2진수로하면 "1000"이다.
8의 이진 표현에는 인접한 쌍의 1이 없어서 0을 반환한다.

#3
Input: n = 5
Output: 0
Explanation: 5를 2진수로하면 "101"이다.

Constraints

  • 1 <= n <= 10^9

Solved

class Solution {
    public int binaryGap(int n) {
        int maxGap = 0;
        int currGap = -1;

        while(n != 0){
            if((n & 1) == 1){
                if(currGap != -1){
                    maxGap = Math.max(maxGap, currGap);
                }

                currGap = 1;
            }else{
                if(currGap != -1){
                    currGap++;
                }
            }

            n >>= 1;
        }

        return maxGap;
    }
}
profile
내 마음대로 코드 작성하는 세상

0개의 댓글