Codility – BinaryGap

문제

https://app.codility.com/programmers/lessons/1-iterations/binary_gap/


정답

def solution(N):
    max_gap = 0
    counter = -1

    while N >= 1:
        n = N % 2
        N = int(N / 2)

        if n == 0:
            if counter == -1: continue
            counter += 1
        
        if n == 1:
            if max_gap < counter:
                max_gap = counter
            counter = 0

    return max_gap  

풀이

예외처리를 올바르게 할 수 있는지 파악하는 문제입니다.

처음 1이 나온 순간부터 다음 1이 나온 순간까지 counter에 값을 누적 시킵니다.

만약 1이 한번도 나오지 않은 경우라면 0이 나와도 개수를 세지 않습니다.

다음 1이 나왔을 때, 기존 max_gap보다 크다면 해당 값을 저장 합니다. 이후, 다시 0의 개수를 세기 위해 counter를 초기화 합니다.

counter를 -1로 초기화 한 이유는 1이 한번도 안 나온 상태에서 0을 세지 않게 하기 위해서 입니다.


  • 초기화 구분을 위해 -1을 쓰면 편합니다.

Post Author: Jinn