公式

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. まず1行目の入力から \(N\), \(P\), \(B\), \(K\) を読み取る
  2. 2行目の入力から各スタッフのシフト回数リスト \(C_list\) を読み取る
  3. 合計給料 total_salary を0で初期化
  4. 各スタッフのシフト回数 \(C\) についてループ処理:
    • \(C \geq K\) の場合: \(C \times (P + B)\) を合計に加算
    • \(C < K\) の場合: \(C \times P\) を合計に加算
  5. 計算した合計給料を出力

計算量

  • 時間計算量: \(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 によって生成されました。

投稿日時:
最終更新: