企業の技術テストでCodilityの問題が出されることあり、最近Codilityについて勉強しているので、せっかくだし自分の回答をわかりやすく説明してQuitaに載せておこうと思う。
lesson1のBinaryGapの問題は受け取った値を二進数に変換した際に登場する0の個数に関する問題。
1で区切った際に最大の0の個数はいくつかを聞く問題だ。
例えば1000100の場合は4を返すようにする。
[アルゴリズム]
1.受け取った数値を二進数に変換する。
2.変換された値を桁ごとに区切り、それぞれの値をリストに格納する。
3.リストから要素数分、一つ一つ値を取り出していき、0になった瞬間からカウントを開始、0の個数を保持しておく。
4.0の出た回数をそれぞれを比較し最も多い回数を返せばいい。
具体的にコードを見ていこう。
(なお私のコードは処理速度を速くするためになるべく二重ループはしないように心掛けている。)
def solution(N):
bin_N = int(format(N,'b'))
bin_N_list = []
while bin_N != 0: #リスト格納部分
bin_N_list.insert(0,bin_N%10)
bin_N = bin_N//10
len_list = len(bin_N_list)
i = 0 #配列走査のための変数
zero_count = 0 #0を数えるための変数
max_zero_count = 0 #zero_countの最大値 while文を回しながら更新していく
while i < len_list:
if bin_N_list[i] == 0:
zero_count +=1
else:
if max_zero_count <= zero_count:
max_zero_count = zero_count
zero_count = 0
i +=1
return max_zero_count
さて結果は。。。。?
あれ、少しミスがあったようです。
どこがミスっているかコメントください。