AtCoder ABC 014 B – 価格の合計 Python解説

スポンサーリンク

価格の合計

今回の問題はこちらから「価格の合計」。問題文にあるように、与えられるXのK番目のビットが立っていればKの番目のアイテムを含み、最後に価格の合計を出力することが求められている。

今回の問題はXを2進数に変換して、ビットが立っているか調べるだけなので、2進数への変換の仕方を知っているかどうかで難易度が変わると思います。

2進数にするには、割れなくなるまで2で割っていき、余りを右から足していきます。

# 12を2進数にする場合

binary = ""
12 / 2 = 6 余り 0  binary = "0"
 6 / 2 = 3 余り 0  binary = "00"
 3 / 2 = 1 余り 1  binary = "100"
 1 / 2 = 0 余り 1  binary = "1100"

これをPythonのコードで書いてみると

# 10進数を2進数にする
x = int(input())

binary = ""

while x > 0:
    binary = str(x % 2) + binary 
    x //= 2
    
print(binary)

あとは問題文にあるように、ビットが立っている商品の価格の合計を求めましょう。
次のコードは、Xを2で割っていき、余りが0だったらpass、1だったら商品の価格を足しています。

n, x = map(int, input().split())
a = list(map(int, input().split()))
cnt = 0
i = 0
while x > 0:
    if x % 2 == 0:
        pass
    else:
        cnt += a[i]
    i += 1
    x //= 2
    
print(cnt)