(コードカタ)-いつも0が出ているので、いくつか数えましょう.


質問する

양수 N을 이진법으로 바꿨을 때, 연속으로 이어지는 0의 갯수가 가장 큰 값을 return.

이어지는 0은 1과 1사이에 있는 것을 의미.
이런 것을 binary gap 이라고 한다.

input: 9
output: 2
설명: 9의 이진수는 1001. 
1과 1사이에 있는 0은 2 이므로, 2를 return

input: 529
output: 4
설명: 529의 이진수는 1000010001. 
1과 1사이에 있는 연속된 0의 수는 4와 3.
이 중 큰 값은 4이므로 4를 return

input: 20
output: 1
설명: 20의 이진수는 10100.
1과 1사이에 있는 연속된 0의 수는 1.
(뒤에 있는 0은 1사이에 있는 것이 아니므로)

input: 15
output: 0
설명: 15의 이진수는 1111.
1과 1사이에 있는 0이 없으므로 0을 return

input: 32
output: 0
설명: 32의 이진수는 100000.
1과 1사이에 있는 0이 없으므로 0을 return

最初の解

def solution(N):
  bins = format(N, 'b')
  zero_count = 0
  zero_num = []
  for bin in bins:
    if bin == '0':
      zero_count += 1
    else:
      zero_num.append(zero_count)
      zero_count = 0

  return int(max(zero_num))
format関数を使用して、与えられたn(int)をバイナリ文字列に変換します.b前に#を付けると0bが現れます.
その後、数を数えると、2進数のNのstring 0の個数になります.文字が0の場合は1つずつzero countをアップロードし、そうでない場合はzero numというリストにこれまで発見されたzero countの数を順番に入れます.
次にzero countを0に初期化し、0からカウントを再開します.連続する0が必要だから!
そしてzero numで最大の数を返すと終了!

短所

  • が雑然としていますか…?