ABC197_B
Table of Contents
AtCoder Beginner Contest 197 B
お題
上下左右にどこまで障害物がないかを問う問題。
ライトが照らすマスを数えるバージョンとかで類題が多い。
全マスの状態を調べないと行けない場合は、縦横の数によっては、工夫が必要。
今回は、一箇所の上下左右だけ見ればいいので簡単な方。
ポイント
解答では、障害物があったらループを抜けて、ループが回った回数を足していく。
上下左右あるので、4回forを書いているけど、コピペコーディングっぽくてちょっとかっこ悪い感じがする。
ansを1で初期化しているのは、最初のマス。最初のマスが障害物だったりする意地悪なケースは想定しなくていいらしい。
解答
def main():
H, W, X, Y = map(int, input().split())
S = [input() for _ in range(H)]
x = X-1
y = Y-1
ans = 1
for _x in range(x+1, H):
if S[_x][y] != "#":
ans += 1
else:
break
for _x in range(x-1, -1, -1):
if S[_x][y] != "#":
ans += 1
else:
break
for _y in range(y+1, W):
if S[x][_y] != "#":
ans += 1
else:
break
for _y in range(y-1, -1, -1):
if S[x][_y] != "#":
ans += 1
else:
break
print(ans)
if __name__ == '__main__':
main()