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()
kokardy avatar
kokardy
a pharmacist and a software engineer