考えて競プロする

プログラミングコンテストの問題をどう考えて解いたかを記録していくブログです。使用言語はPython3

ABC083-B - Some Sums を解く

ABC083-B - Some Sums

 

1以上N以下の整数のうち

10進法での各桁の和がA以上B以下であるものの総和を求める問題

 

制約は 1 <= N <= 10^4 と小さいので

素直に全列挙する方針で解く

 

以上を踏まえて書いたコードを以下に示す

 

提出したコード

# 入力
N,A,B=map(int,input().split())

c=0
for x in range(1,N+1):
  y=list(str(x))

  # 各桁の和を求める
  z=sum([int(a) for a in y])

  # 各桁の和がA以上B以下なら加算
  if A<=z and z<=B:
    c+=x

# 出力
print(c)

 

今回は各桁の和を求める際にリスト内包表記を使用した

 

# 各桁の和を求める
z=sum([int(a) for a in y])
 

リスト内包表記を使用することで以下のように

リスト内の文字列を要素を int 型にキャストすることができる

str 型の数字を要素に持つリストに対しても sum 関数が使用できるようになる

 

>>> l=['1','2','3','4']
>>> l=[int(x) for x in l]
>>> print(l) [1, 2, 3, 4]
>>> sum(l) 10

 

提出結果はACでした