公式
A - アルバイトの給料計算 / Calculating Part-Time Job Pay 解説 by admin
DeepSeek V3概要
各アルバイトスタッフのシフト回数に応じて、基本給と特別手当を計算し、全スタッフの給料合計を求める問題です。
考察
問題の条件はシンプルで、各スタッフのシフト回数 \(C_i\) が閾値 \(K\) 以上かどうかで支払い単価が変わります。\(C_i \geq K\) の場合はシフト1回あたり \((P + B)\) 円、そうでない場合は \(P\) 円です。各スタッフについて条件分岐しながら給料を計算し、それらを合計すればよいです。入力サイズが最大 \(N \leq 100\) と小さいため、単純なループ処理で十分効率的です。
アルゴリズム
- まず1行目の入力から \(N\), \(P\), \(B\), \(K\) を読み取る
- 2行目の入力から各スタッフのシフト回数リスト \(C_list\) を読み取る
- 合計給料
total_salaryを0で初期化 - 各スタッフのシフト回数 \(C\) についてループ処理:
- \(C \geq K\) の場合: \(C \times (P + B)\) を合計に加算
- \(C < K\) の場合: \(C \times P\) を合計に加算
- 計算した合計給料を出力
計算量
- 時間計算量: \(O(N)\)
- \(N\) 人のスタッフに対して定数時間の処理を行うため
- 空間計算量: \(O(N)\)
- シフト回数のリストを保存するため
実装のポイント
条件分岐は
if C >= K:で行い、等号を含めることが重要(問題文で「\(K\) 回以上」と指定されているため)入力の読み取りには
map(int, input().split())を使用し、効率的に数値変換を行う変数名を意味のあるものにすることでコードの可読性を高めている(例:
total_salary,C_list)ソースコード
def main():
data = list(map(int, input().split()))
N, P, B, K = data
C_list = list(map(int, input().split()))
total_salary = 0
for C in C_list:
if C >= K:
total_salary += C * (P + B)
else:
total_salary += C * P
print(total_salary)
if __name__ == "__main__":
main()
この解説は deepseekv3 によって生成されました。
投稿日時:
最終更新: