【AtCoder】ABC318解説(Python)

THIRD プログラミングコンテスト 2023 アルゴ(AtCoder Beginner Contest 318)の解説記事です。

目次

ABC318 A – Full Moon

問題

解法1

M日目からN日目の間、P日ごとに解答に1を足す操作を行う。

解説

まず入力 \(N\) , \(M\) , \(P\) をintとして受け取ります。

# 入力
N,M,P=map(int, input().split())

解答用の変数を初期値0で用意します。

# 解答用の変数
ans=0

\(M\) 日目から \(N\) 日目の間、 \(P\) 日ごとに解答に1を足す操作を行う。
最後に答えを出力します。

# M日目からN日目の間
while M<=N:
    # 解答に1を足す
    ans+=1
    # P日後
    M+=P

# 解答を出力
print(ans)

解答

# 入力
N,M,P=map(int, input().split())

# 解答用の変数
ans=0

# M日目からN日目の間
while M<=N:
    # 解答に1を足す
    ans+=1
    # P日後
    M+=P

# 解答を出力
print(ans)

解法2

植木算として考える。

解説

問題文は \(M\) メートル先から\(N\) メートルの先までの道に \(P\) メートル間隔で木を植えるとき何本植えられますか?と同じ意味になります。

つまり、長さ \(N – M\) メートルの道に \(P\) メートル間隔で木を植えるとき何本植えられますか?と言い換えられるので、\(N – M\)が0未満であれば00以上の場合は \(N – M\) を \(P\) で割った整数部分プラス1になります。

これは次のように書けます。

print(0 if N-M<0 else (N-M)//P+1)

解答

# 入力
N,M,P=map(int, input().split())

# 解答を出力
print(0 if N-M<0 else (N-M)//P+1)
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次