양수 N을 이진법으로 바꿨을 때,
연속으로 이어지는 0의 갯수가 가장 큰 값을
반환하는 함수를 만들어라.
이어지는 0은 1과 1사이에 있는 것을 의미합니다.
이런 것을 binary gap 이라고 한다.
input: 529 = 1000010001(2) output: 4
input: 20 = 10100(2) output: 1(뒤에 있는 0은 1사이에 있는 것이 아니다)
input: 15 = 1111(2) output: 0
output: 01과 1사이에 있는 0이 없으므로 0을 반환
def solution(N):
#step1
cnt = 0
max_value = 0
Nb = bin(N)[2:]
temp = ''
#step2
while Nb.find("1") != -1:
Nb = Nb[Nb.find("1") + 1:]
if Nb.find('1') != -1:
tmp = Nb[:Nb.find("1")]
cnt = tmp.count("0")
if max_value < cnt:
max_value = cnt
Nb = Nb[Nb.find("1"):]
return max_value
def solution(N):
#step1
cnt = 0
max_value = 0
Nb = bin(N)[2:]
temp = ''
최대값을 저장할 max_value,
N을 문자열 2진법으로 바꾼 문자열Nb,
binary gap을 일시적으로 담아둘 문자열 tmp를 만든다
def solution(N):
#... ...#
#step2
while Nb.find("1") != -1:
#2-1
Nb = Nb[Nb.find("1") + 1:]
if Nb.find('1') != -1:
tmp = Nb[:Nb.find("1")]
cnt = tmp.count("0")
#2-2
if max_value < cnt:
max_value = cnt
#2-3
Nb = Nb[Nb.find("1"):]
return max_value
가장 앞에 1을 찾고, 중간 1을 찾아 그 사이
0을 tmp에 저장 한다.
tmp 에 담긴 0을 갯수를 cnt에 저장 한다.
(만약 더 이상 1이 없다면, while문을 빠져 나간다)
cnt가 기존 max_value보다 크다면
max_value를cnt 값으로 갱신 한다.
Nb를 tmp를 제외한 문자열로 초기화하고,
Nb에 빈문자열이 남을 때 까지, 앞선 동작을 반복한다.