ebisukeプログラミング初心者脱出黙示録

30歳を過ぎてから始めたプログラミングと競プロの記録。Pythonで取り組んでいます。Arduinoで電子工作も

AtCoder-ABC197 A - Rotate / B - Visibility【Python解答例】

f:id:ebisuke33:20210328102900p:plain
AtCoder Beginner Contest197のA とB問題についてPythonの解答例を記事にしていきます。
atcoder.jp



AtCoder Beginner Contest197 A - Rotate

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

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