LoginSignup
0
0

【paizaラーニング】レベルアップ問題集 ソートメニュー応用編 「スケジューリング」 PHP

Posted at

問題

解答

 最初にコードを書いた時に、キャンペーンxの終了日キャンペーンx+1の開始日を比較してました。それだとこっちのテストが通らなくて...

n = 3, l = [ 1, 3, 6 ], r = [ 8, 5, 9 ]

 なのでキャンペーンごとの終了日だけに注目しました。終了日だけを昇順にして、キャンペーンを確認していく方針ですね。そうすると早い終了日を選択していくことになるので、できるだけ多くのキャンペーンに参加できます。

関数定義

<?php
    function maxCam($x, $l, $r) {
        $maxCam = 0;
        $endTime = 0;
        // カウント変数の初期化
        // 終了日の初期化
        array_multisort($r, $l);
        // ここの操作を逆にしていたのでうまくいきませんでした。
        for($i = 0; $i < $x; $i++) {
            if($endTime < $l[$i]) {
                // 前回のスケジュールが終わった日と、次のスケジュールの開始日を比較
                $maxCam++;
                $endTime = $r[$i];
                // 終了日の更新
            }
        }
        return $maxCam;
    }

入力と出力

    $n = trim(fgets(STDIN));
    for($i = 0; $i < $n; $i++) {
        list($a, $b) = explode(" ", trim(fgets(STDIN)));
        
        $left[] = $a;
        $right[] = $b;
        
    }
    
    echo maxCam($n, $left, $right);
?>
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0