タムログ

プログラミングについての情報発信をしていきます!

AtCoder Beginner Contest 162 B を Python で

AtCoder Beginner Contest 162 B を Python で解説していきます。
一緒に頑張っていきましょう!
まずは問題文から。
https://atcoder.jp/contests/abc162/tasks/abc162_b


B – FizzBuzz Sum


実行時間制限: 2 sec / メモリ制限: 1024 MB

配点 : 200 点

問題文

FizzBuzz列 a1,a2,… を次のように定めます。

  • i が 3 でも 5 でも割り切れるなら、ai=FizzBuzz
  • そうではなく i が 3 で割り切れるなら、ai=Fizz
  • そうではなく i が 5 で割り切れるなら、ai=Buzz
  • そうではないなら、ai=i

FizzBuzz列の N 項目までに含まれる数の和を求めてください。

制約

  • 1≤N≤10^6

入力

入力は以下の形式で標準入力から与えられる。

N

出力

FizzBuzz列の N 項目までに含まれる数の和を出力せよ。


解説

FizzBuzz の問題ですね。
ただ今回は FizzBuzz はそこまで関係なく,ただ N 項目までに現れる数字の和を出せばよいだけなので,1~Nまでの数字の中で3でも5でも割れない数の和を出します。

そのために,for ループを1~Nまでの数字でかませるように,

for i in range(1, N+1)

としてやります。
この i に対して,3でも5でも割り切れないなら,和を考えます。
3でも5でも割り切れないという条件は,3で割った余りも5で割った余りも0でないということですので,

i % 3 != 0 and i % 5 != 0

で記述できます。
あとはこのような条件を満たす i の和をとってやればよいです。
以下に解答例を載せておきます。

解答例

N = int(input())
 
ans = 0
for i in range(1, N+1):
    if i % 3 != 0 and i % 5 != 0:
        ans += i
 
print(ans)

いかがだったでしょうか。
自分は range の範囲を range(n) としてしまうという単純なミスをしてしまって WA になってしまいました。😱
やっぱり焦りは禁物ですね。反省です。(-_-;)
それでは!