ebisuke競プロ初心者脱出黙示録

30歳を過ぎてから始めたプログラミングと競プロの記録。Pythonで取り組んでいます。C言語も少しだけ勉強中

AtCoder-ABC198 A - Div / B - Palindrome with leading zeros【Python解答例】

https://cdn-ak.f.st-hatena.com/images/fotolife/e/ebisuke33/20210411/20210411231954.png
AtCoder Beginner Contest198のA とB問題についてPythonの解答例を記事にしていきます。
atcoder.jp



AtCoder Beginner Contest198 A - Div

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