見出し画像

日刊競プロ ABC 197 - B - Visibility-

B - Visibility

問題文
縦 H 行、横 W 列のマス目があり、いくつかのマスには障害物が置かれています。
上から i 番目、左から j 番目のマスをマス (i,j) と表すことにします。
H 個の文字列 S1​,S2​,S3​,…,SH​が与えられます。Siの j 文字目はマス (i,j) の状態を表し、# なら障害物が置かれていることを、. なら障害物が置かれていないことを表します。
このマス目上のあるマスからあるマスが見えるとは、2 つのマスが同じ行または列にあり、2 つのマスの間 (2 つのマス自身を含む) に障害物が 1 つも置かれていないことを意味します。
このマス目上のマスであって、マス (X,Y) から見えるもの (マス (X,Y) 自身を含む) の数を求めてください。
制約
1≤H≤100
1≤W≤100
1≤X≤H
1≤Y≤W
Si​は . および # のみからなる長さ W の文字列
マス (X,Y) に障害物は置かれていない

考えたこと

対象のマスから外側を見たときに、どこまで見えているかを考える。その場合、外側から数えてしまうとコードが難しくなるので、対象のマスから外側へ「.」があるかを数えるようにすると良い。上下左右で4回数えてあげれば良い。自分のマスもカウントする必要があるので、4回数える場合は3を引いてあげれば良い

H,W,X,Y = map(int,input().split())
templist = []
tatelist = []
for i in range(H):
 a=input()
 templist.append(a)
ans=-3
for j in range(Y-1,-1,-1):
 if templist[X-1][j]==".":
   ans+=1
 else:
   break
for j in range(Y-1,W):
 if templist[X-1][j]==".":
   ans+=1
 else:
   break
for i in range(X-1,-1,-1):
 if templist[i][Y-1]==".":
   ans+=1
 else:
   break
for i in range(X-1,H):
 if templist[i][Y-1]==".":
   ans+=1
 else:
   break
   
print (ans)


写真はサンシャイン水族館のペンギン

この記事が気に入ったらサポートをしてみませんか?