公式
A - アルバイトの給料計算 / Calculating Part-Time Job Pay 解説 by admin
Claude 4.6 Opus (Thinking)概要
各アルバイトスタッフのシフト回数に応じて、基本給のみか基本給+特別手当かを判定し、全員の給料の合計額を求める問題です。
考察
この問題では、スタッフごとに以下の2パターンのどちらかで給料が決まります。
- シフト回数 \(C_i\) が \(K\) 回以上 → \(1\) 回あたり \((P + B)\) 円
- シフト回数 \(C_i\) が \(K\) 回未満 → \(1\) 回あたり \(P\) 円
つまり、各スタッフについて「シフト回数が閾値 \(K\) 以上かどうか」を判定し、該当する単価にシフト回数を掛ければ、そのスタッフへの支払額が求まります。
具体例で確認してみましょう。
例えば \(N = 3\), \(P = 100\), \(B = 50\), \(K = 5\) で、シフト回数が \(C = [3, 5, 8]\) の場合:
| スタッフ | シフト回数 | \(K\) 以上? | 単価 | 支払額 |
|---|---|---|---|---|
| 1 | 3 | No | \(100\) 円 | \(3 \times 100 = 300\) 円 |
| 2 | 5 | Yes | \(150\) 円 | \(5 \times 150 = 750\) 円 |
| 3 | 8 | Yes | \(150\) 円 | \(8 \times 150 = 1200\) 円 |
合計: \(300 + 750 + 1200 = 2250\) 円
この問題は制約が小さく(\(N \leq 100\))、単純にループで全スタッフを処理すれば十分です。特別な工夫やアルゴリズムは不要で、素朴なアプローチで問題なく解けます。
アルゴリズム
- \(N\), \(P\), \(B\), \(K\) および各スタッフのシフト回数 \(C_1, C_2, \ldots, C_N\) を入力から読み取る。
- 合計額
totalを \(0\) で初期化する。 - 各スタッフ \(i\) について:
- \(C_i \geq K\) なら、
totalに \(C_i \times (P + B)\) を加算する。 - \(C_i < K\) なら、
totalに \(C_i \times P\) を加算する。
- \(C_i \geq K\) なら、
totalを出力する。
計算量
- 時間計算量: \(O(N)\) — 各スタッフについて1回ずつ判定と計算を行うだけです。
- 空間計算量: \(O(N)\) — シフト回数のリストを保持する分です(逐次読み込めば \(O(1)\) も可能)。
実装のポイント
条件判定は「\(K\) 回以上」であることに注意してください。
>=を使います(>ではありません)。特別手当は「基本給に上乗せ」されるので、\(K\) 回以上のスタッフの単価は \(P + B\) です。特別手当 \(B\) のみではなく、基本給 \(P\) も含まれる点を見落とさないようにしましょう。
ソースコード
N, P, B, K = map(int, input().split())
C = list(map(int, input().split()))
total = 0
for c in C:
if c >= K:
total += c * (P + B)
else:
total += c * P
print(total)
この解説は claude4.6opus-thinking によって生成されました。
投稿日時:
最終更新: