この記事では2021年1月2日に行われたAtCoder Beginner Contest 187のA問題について、Python3における解法をお伝えします。
なるべく分かりやすく解説できるよう心がけますが、競プロ初心者のため改善点・問題点がありましたらコメントまたはTwitterでご指摘ください。
Twitter:@soh_1121_
A:Large Digits
問題文
整数nに対して、nを十進法で表したときの各桁の和をS(n)で表すことにします。例えば、S(123)=1 + 2 + 3 = 6です。
2つの3桁の整数A, Bが与えられます。S(A)とS(B)のうち大きい方の値を求めてください。制約
・入力は全て整数
・100 ≦ A, B ≦ 999入力
入力は以下の形式で標準入力から与えられる。A B
出力
AtCoder Begginer Contest 187 A – Large Digits
S(A)とS(B)のうち大きい方の値を出力せよ。
S(A)とS(B)が等しい場合は、S(A)の値を出力せよ。
問題文のとおりに3桁の整数を1桁ずつに分解して加算します。
def main():
A, B = input().split()
A = list(map(int, list(A)))
B = list(map(int, list(B)))
print(max(sum(A), sum(B)))
main()
標準入力を文字列として受け取り、list()
を用いて1文字ずつに分解します。
得られた1文字ずつの数字に対してmap()
を用いて全てint型にした上でリストで保持します。
それぞれのリストの合計をsum()
で算出してmax()
で比較。
結果をprint()
で出力してACとなります。
まとめ:どうやって一桁ずつ計算するかが鍵
この記事では2021年1月2日に行われたAtCoder Beginner Contest 187のA問題について、Python3における解法をお伝えしました。
解法はいくつかあるとは思いますが、どうやって一桁ずつ計算するかというところが鍵を握るのではないでしょうか?
それぞれ文字列のままfor文で1文字ずつ取り出してint型に変換して加算していく方法もありますし、zip()
を用いて両方の文字列を1文字ずつ取り出して計算する方法もありますね!
色々な方法を試してみるのも勉強になるかと思います。
この解法がみなさまの気づきの1つになれば幸いです。
B・C・D問題も解けたので、それらも解説していければと思います!
みなさんも楽しみながら競プロに取り組んでいきましょう!