AtCoder-ABC198 A - Div / B - Palindrome with leading zeros【Python解答例】
AtCoder Beginner Contest198のA とB問題についてPythonの解答例を記事にしていきます。
atcoder.jp
AtCoder Beginner Contest198 A - Div
問題文
N 個の互いに区別できないお菓子を、A君とB君で分け合います。 両者とも 1 個以上の整数個のお菓子を得るような分け方は何通りありますか?
制約
・N は整数
・1≤N≤15
解答例
n = int(input()) print(n-1)
解説
N個のお菓子の分け方が何通りあるか答える問題です。
A君とB君はどちらも1個以上はもらわないといけないので、A君は最大でN-1個のお菓子をもらえます。
最小で1、最大でN-1なので分け方もN-1通りとなります。
入力をnとするとn-1を出力すればOKでした。
AtCoder Beginner Contest198 B - Palindrome with leading zeros
B - Palindrome with leading zeros
問題文
整数 N が与えられます。
N を十進法で表した文字列の先頭に 0 個以上の 0 をつけることで、回文にすることはできますか?
制約
・0≤N≤10^9
解答例
n = input() if n == "0": print("Yes") exit() num = -(-len(n)//2) for i in range(len(n)): if n[-1] == "0": n = n[:-1] else: break num = len(n)//2 flag = True for i in range(num): if n[i] == n[-(i+1)]: continue else: flag = False break if flag: print("Yes") else: print("No")
解説
与えられたNの先頭に任意の数だけ0を足して回文にできるか答える問題です。
先頭に0を足すことができるので、小さい桁から連続した0を消していきました。
次に判定用のフラグを用意し、0を消した文字列の先頭と末尾を比較します。
先頭と末尾が同じなら回文にできるので比較を続けていきます。
すべての文字を比較し終えることができたらフラグは変更せずYesを出力します。
どこかで違う部分が出たらフラグをFalseにしてNoを出力します。
このようなプログラムでACをとれました。
続いてABC198のC問題も記事にしていきたいと思います。
ABC198の関連記事はこちら
ebisuke33.hatenablog.com