CK week4 day1

BnDC·2021년 10월 11일
0

code Kata

목록 보기
16/22

🧨 문제

양수 N을 이진법으로 바꿨을 때,
연속으로 이어지는 0의 갯수가 가장 큰 값을
반환하는 함수를 만들어라.

이어지는 011사이에 있는 것을 의미합니다.
이런 것을 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



📍 step1

def solution(N):
#step1
  cnt = 0
  max_value = 0
  Nb = bin(N)[2:]
  temp = ''

최대값을 저장할 max_value,
N을 문자열 2진법으로 바꾼 문자열Nb,
binary gap을 일시적으로 담아둘 문자열 tmp를 만든다



📍 step2

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

2 - 1

가장 앞에 1을 찾고, 중간 1을 찾아 그 사이
0tmp에 저장 한다.
tmp 에 담긴 0을 갯수를 cnt에 저장 한다.

(만약 더 이상 1이 없다면, while문을 빠져 나간다)

2 - 2

cnt가 기존 max_value보다 크다면
max_valuecnt 값으로 갱신 한다.

2 - 3

Nbtmp를 제외한 문자열로 초기화하고,
Nb에 빈문자열이 남을 때 까지, 앞선 동작을 반복한다.

profile
“Life is C (Choice) between B (Birth) and D (Death).” - 인생은 B와 D사이의 C

0개의 댓글