キーワード
問題
問題文
縦8マス、横8マスの64マスからなるマス目があります。
上からi行目(1≤i≤8)、左からj列目(1≤j≤8)のマスをマス(i,j)と呼ぶことにします。
それぞれのマスは、空マスであるかコマが置かれているかのどちらかです。
マスの状態は長さ8の文字列からなる長さ8の列(S1,S2,S3,…,S8)で表されます。
マス(i,j)(1≤i≤8,1≤j≤8)は、Siのj文字目が.のとき空マスで、#のときコマが置かれています。
あなたは、すでに置かれているどのコマにも取られないように、いずれかの空マスに自分のコマを置きたいです。
マス(i,j)に置かれているコマは、次のどちらかの条件を満たすコマを取ることができます。
i行目のマスに置かれているj列目のマスに置かれているたとえば、マス(4,4)に置かれているコマは、以下の図で青く示されたマスに置かれているコマを取ることができます。
あなたがコマを置くことができるマスがいくつあるか求めてください。
制約
Si は ., # からなる長さ 8 の文字列 (1≤i≤8)
入力
入力は以下の形式で標準入力から与えられる。
S1
S2
S3
S4
S5
S6
S7
S8
出力
すでに置かれているコマに取られずに自分のコマを置くことができる空マスの個数を出力せよ。
入力例 1
...#....
#.......
.......#
....#...
.#......
........
........
..#.....
出力例 1
4
すでに置かれているコマは、以下の図で青く示されたマスに置かれたコマを取ることができます。
よって、あなたがすでに置かれているコマに取られないように自分のコマを置くことができるマスはマス (6,6), マス (6,7), マス (7,6), マス (7,7) の 4 マスです。
入力例 2
........
........
........
........
........
........
........
........
出力例 2
64
コマがひとつも置かれていないこともあります。
入力例 3
.#......
..#..#..
....#...
........
..#....#
........
...#....
....#...
出力例 3
4
回答
s = []
key = 0
for _ in range(8):
line = input().translate(str.maketrans(".#", "01"))
s.append([int(i) for i in line])
if any(s[-1]):
s[-1] = [num + 1 for num in s[-1]]
key += 1
list = [sum(column) for column in zip(*s)]
list = [num - key for num in list]
for i in range(8):
if sum(s[i]) == 0:
s[i] = list
ans = sum(r.count(0) for r in s)
print(ans)
参考
備考
- 多分もうすこし綺麗なアルゴリズムが書ける。
- 頭の中の処理とアルゴリズムが一致していないような気がする。まぁでも動いたからいいや
- コードを書いた上で、そのコードを添削する方法がいい感じな気がする。
- 昨日でこのコードをかけたのだが、提出すると実行時エラーが全部で発生して正解しなかった。コードテストのサンプルでは正解できていたし、コードテストもものすごい時間がかかっていたことから、atcoder側のエラーな気がする。つまり僕は悪くない!
- 他の人のコードを見る限り、forでiとjを動かして、どちらかに#があるとアウトみたいな探している人が多いような気がする。