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

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

AtCoder-ABC223 A - Exact Price / B - String Shifting【Python解答例】

AtCoder Beginner Contest223のA とB問題についてPythonの解答例を記事にしていきます。
AtCoder Beginner Contest 223 - AtCoder



AtCoder Beginner Contest223 A - Exact Price

A - Exact Price

問題文

高橋君の財布の中には 100 円硬貨が 1 枚以上入っており、それ以外には何も入っていません。

高橋君の財布の中の合計金額が X 円である可能性はありますか?

制約

・0≤X≤1000
・入力は全て整数

解答例

x = int(input())

if x > 0 and x % 100 == 0:
    print("Yes")
else:
    print("No")

解説

X円が100の倍数か判定する問題です。

Xが100の倍数かどうかは、Xを100で割った余りが0かどうかでわかります。

ただし、Xは0である可能性があり、そのときの余りも0になることに注意します。

Xが0より大きく、100で割った余りが0のときはYesを、そうでなければNoを出力すればOKでした。



AtCoder Beginner Contest223 B - String Shifting

B - String Shifting

問題文

空でない文字列に対し、先頭の文字を末尾に移動する操作を左シフト、末尾の文字を先頭に移動する操作を右シフトと呼びます。

例えば、abcde に対して左シフトを 1 回行うと bcdea となり、右シフトを 2 回行うと deabc となります。

英小文字からなる空でない文字列 S が与えられます。S に対し左シフトと右シフトをそれぞれ好きな回数(0 回でもよい)行って得られる文字列のうち、辞書順で最小のものと最大のものを求めてください。

制約

・S は英小文字からなる。
・S の長さは 1 以上 1000 以下である。

解答例

s = input()

List = []
for i in range(len(s)):
    tmp = s[i:] + s[:i]
    List.append(tmp)

List.sort()

print(List[0])
print(List[-1])

解説

与えられた文字列を右シフト、あるいは左シフトすることでできる文字列の辞書順最小と最大のものを答える問題です。

シフトしてできる文字列をすべて作成し、Listに格納していきます。

スライスを使ってシフトした文字列を作成しました。

すべての文字列を作成したあとにListをソートします。

ソート後の最初の文字列が辞書順最小に、最後の文字列が最大になりますので、それぞれ出力すればACでした!