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

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

AtCoder-ABC221 A - Seismic magnitude scales / B - typo【Python解答例】

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



AtCoder Beginner Contest221 A - Seismic magnitude scales

A - Seismic magnitude scales

問題文

地震のマグニチュードは、その地震のエネルギーの大きさを対数で表した値です。マグニチュードが 1 増える度にエネルギーは約 32 倍になることが知られています。
ここではマグニチュードが 1 増える度に地震のエネルギーがちょうど 32 倍になるとします。このとき、マグニチュード A の地震のエネルギーの大きさはマグニチュード B の地震のエネルギーの大きさの何倍ですか?

制約

・3≤B≤A≤9
・A , B は整数

解答例

a, b = map(int,input().split())

ans = pow(32,a-b)

print(ans)

解説

マグニチュードAの地震とマグニチュードBの地震のエネルギーでは何倍違うかを答える問題です。

問題文にマグニチュードが1増えるごとにエネルギーは32倍になるとしていますので、答えは32のA-B乗です。

ansにこの値を計算し出力すればOKでした。



AtCoder Beginner Contest221 B - typo

B - typo

問題文

文字列 S, T が与えられます。以下の操作を高々 1 回行うことで、S を T と一致させることができるかを判定してください。

S の隣り合う 2 文字を選び、入れ替える。
なお、上記の操作を一度も行わないことも可能です。

制約

・S, T はそれぞれ英小文字のみからなる、長さ 2 以上 100 以下の文字列
・S の長さと T の長さは等しい

解答例

s = input()

t = input()

flag = True
count = 0
i = 0
while i < (len(s)-1):
    if s[i] == t[i]:
        i += 1
        continue
    elif s[i] != t[i] and s[i] == t[i+1] and t[i] == s[i+1] and count ==0:
        count += 1
        i += 2
        continue
    else:
        flag = False
        break

if flag :
    print("Yes")
else:
    print("No")

解説

Sの隣り合う文字を最大1回入れ替えることで、Tと一致するかを答える問題です。

Sの文字列の先頭からTと一致しているか、確認していきました。

もしSとTが異なっていたら、次の文字と比較し S[i]とT[i+1]が、T[i]とS[i+1]が一致していたら探索を続けます。
ただし、入れ替えは1回までなのでcount変数を1を足して、入れ替え回数を管理します。

もし2回以上入れ替えの必要があったり、文字を入れ替えても一致しない場合はflagをFalseにして、flagの状況にあわせて答えを出力すればOKです。


ABC221の関連記事はこちら
ebisuke33.hatenablog.com
ebisuke33.hatenablog.com