AtCoder ABC 186 B – Blocks on Grid Python解説

スポンサーリンク

Blocks on Grid

縦 H マス、横 W マスのマス目があります。上から i 行目、左から j 列目のマスには、
ブロックが Ai,j個あります。
どのマスにも同じ個数のブロックがある状態にするには、最小で何個のブロックを取り除けばよいでしょうか?

AtCoder Beginner Contest 「Blocks on Grid」

ブロックを取り除いて、すべてのマスのブロック数を同じにするということなので、ブロックは最小値に揃えることになります。ですので、入力からブロックの最小値を取得し、各マスのブロック数と最小値との差をカウントしていきます。

h, w = map(int, input().split())

li = []
min_a = 100

for _ in range(h):
    a = list(map(int, input().split()))
    min_a = min(min(a), min_a)
    li.append(a)

cnt = 0

for i in range(h):
    for j in range(w):
        cnt += li[i][j] - min_a
        
print(cnt)

for文の中では各マスのブロック数を受け取っていきます。そして、min_aにブロック数の最小値を入れます。2つ目のfor文では、cnt += li[i][j] – min_aで各マスのブロック数と最小値との差をcntに加えています。最後にcntを出力して完了です。