숫자 N이 있다고 가정하면 이진 표현에서 두 개의 연속 1 사이의 가장 긴 거리를 찾아야 합니다. 두 번 연속 1이 없으면 0을 반환합니다.
따라서 입력이 71과 같으면 이진법으로 71이 1000111이기 때문에 출력은 4가 됩니다. 이제 4개가 있고 첫 번째 1과 두 번째 1은 거리 4에 있습니다. 다른 모든 것은 한 거리 떨어져 있습니다. 따라서 여기서 가장 긴 거리는 4입니다.
이 문제를 해결하기 위해 다음 단계를 따릅니다. −
-
K :=N의 이진 표현의 비트 목록 만들기
-
최대 :=0, C :=0, S :=0
-
플래그 :=거짓
-
범위 0에서 K 크기의 i에 대해 수행
-
K[i]가 '1'이고 C가 0이고 플래그가 False이면
-
C:=나는
-
플래그 :=참
-
-
그렇지 않으면 K[i]가 '1'이고 플래그인 경우
-
S:=나는
-
최대
-
최대 :=|S-C|
-
-
C:=S
-
-
-
최대 반환
이해를 돕기 위해 다음 구현을 살펴보겠습니다. −
예시
def solve(N): B = bin(N).replace('0b','') K = str(B) K = list(K) Max = 0 C = 0 S = 0 Flag = False for i in range(len(K)): if K[i] is '1' and C is 0 and Flag is False: C = i Flag = True elif K[i] is '1' and Flag: S = i if Max<abs(S-C): Max = abs(S-C) C = S return Max n = 71 print(solve(n))
입력
71
출력
4