AtCoder-ABC197 A - Rotate / B - Visibility【Python解答例】
AtCoder Beginner Contest197のA とB問題についてPythonの解答例を記事にしていきます。
atcoder.jp
AtCoder Beginner Contest197 A - Rotate
問題文
長さ 3 の文字列 S が与えられます。
S の先頭の文字を S の末尾に移動して得られる文字列 S′ を出力してください。
制約
・S は英小文字のみからなる長さ 3 の文字列である
解答例
S = input() ans = S[1] + S[2] + S[0] print(ans)
解説
問題文のように与えられた3文字の文字列の先頭を末尾に移動させた文字列を答える問題です。
入力をSで受け取った後、Sの2文字目、3文字目、1文字目の順番でans変数に代入します。
そしてans変数を出力すればACでした。
AtCoder Beginner Contest197 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) に障害物は置かれていない
解答例
h, w, x, y = map(int,input().split()) x -= 1 y -= 1 S = [] for i in range(h): S.append(input()) # 座標(x,y)自身もカウントするので初期値は1 ans = 1 # 座標(x,y+1)から下方向の探索 for i in range(1,101): if y+i >= w or S[x][y+i] == "#": break if S[x][y+i] != "#": ans += 1 # 座標(x,y-1)から上方向の探索 for i in range(1,101): if y-i < 0 or S[x][y-i] == "#": break if S[x][y-i] != "#": ans += 1 # 座標(x+1,y)から右方向の探索 for j in range(1,101): if x+j >= h or S[x+j][y] == "#": break if S[x+j][y] != "#": ans += 1 # 座標(x-1,y)から左方向の探索 for j in range(1,101): if x-j < 0 or S[x-j][y] == "#": break if S[x-j][y] != "#": ans += 1 print(ans)
解説
縦H行、横W列のマス目があり、マス目(x,y)から同じ行か同じ列で、間に障害物がないマス目の数を答える問題です。
問題文のようにマス目(x,y)から縦横4方向に探索しました。
求める数はans変数とし、座標(x,y)自身もカウントするので初期値は1にしました。
それぞれの探索はH行W列の範囲外に出るか、障害物にあたるまでansを1だけ足し続けていきます。
それぞれの4方向の探索が終わった後にansを出力すればOKです。
続いてABC197のC問題も記事にしていきたいと思います。
ABC197の関連記事はこちら
ebisuke33.hatenablog.com
ebisuke33.hatenablog.com