문제를 이해하고 있다면 바로 풀이를 보면 됨
전체 코드로 바로 넘어가도 됨
마음대로 번역해서 오역이 있을 수 있음
양의 정수 n이 주어졌을 때, n의 이진 표현에서 인접한 두 1 사이의 가장 긴 거리를 찾아서 반환해라. 인접한 1이 두 개 없으면 0을 반환해라.
두 개의 1은 0만 분리되어 있으면 인접할 수 있다(0은 없을 수도 있다). 두 1 사이의 거리는 비트 위치 간의 절대적인 차이이다. 예를 들어, "1001"은 두 1은 3의 거리를 갖는다.
#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"이다.
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;
}
}