양수 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: 0
1과 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
에 빈문자열이 남을 때 까지, 앞선 동작을 반복한다.