▼問題文のURL
▼改善の概要
[改善前]
マップの最初の行,最後の行,それ以外の行の3つに分け、さらに左端,右端,それ以外の3つに分けてコードを書きました。場合分け9つ(3×3)、コードは43行でした。
[改善後]
場合分け9つは冗長であったため、改善を行いました。結果、場合分けは上下左右の4つ、コードは23行で書くことができました。
-
左の場合は、任意のマップの座標(j,i)において、iが0またはi-1が#のとき、題意の条件を満たすと考えます。右の場合は、iがW-1またはi+1が#のとき、題意の条件を満たすと考えます。上下も同様に考えます。
-
上下左右すべて題意の条件を満たした場合は、マップの座標(j,i)を出力します。
▼改善前の私のコード
H,W = map(int,input().split())
A = [list(input()) for i in range(H)]
for j in range(H):
for i in range(W):
# マップの最初の行
if j == 0:
# 左端
if i == 0:
if A[j+1][i] == "#" and A[j][i+1] == "#":
print(j,i)
# 右端
elif i == W-1:
# 省略
# それ以外
else:
# 省略
# 最後の行
elif j == H-1:
# 省略
# それ以外の行
else:
# 省略