Follow @data_no_memo

メモ

個人的なメモです。他者にわかりやすく書くよりも未来の自分にわかりやすく書いています。なお、記事内容の正確さは保証できません。勉強中の身ですので、間違い等ご指摘頂けたら幸いです。

AtCoder:ABC081B - Shift only

はじめに

Pythonの勉強がてらAtCoderをやっているが、正解にはたどり着くものの処理時間の時間切れになってしまう問題が発生する。私のコーディング力ではこれが限界なので、そのような回答をここに載せる・

問題文

黒板に N 個の正の整数 A 1 , . . . , A N が書かれています.

すぬけ君は,黒板に書かれている整数がすべて偶数であるとき,次の操作を行うことができます.

黒板に書かれている整数すべてを, 2 で割ったものに置き換える. すぬけ君は最大で何回操作を行うことができるかを求めてください.

制約 1 ≤ N ≤ 200 1 ≤ A i ≤ 10 9

TLEとなった解答

x = list(map(int, input().split()))
n = x[0]
a = x[1:]

# リスト内全て偶数ならTrue、奇数入ってたらFalse
def check(l):
    comp = []
    for i in l:
        if i % 2 == 0:
            comp.append(0)
        elif i % 2 != 0:
            comp.append(1)

    if sum(comp) == 0:
        return(True)
    elif sum(comp) != 0:
        return(False)

# リストの全ての要素を2で割り算 できない場合はそのまま
def cndcut(l):
    comp = []
    ans = 0
    while check(l) == True:
        l = list(map(lambda x: x / 2, l))
        ans += 1
    return(ans)

print(cndcut(a))