LoginSignup
0
0

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

Posted at

解答例

皆さん、こんにちは:raised_hand::cow:
<=>という訳の分からない演算子を使って解きました。
三方比較演算子宇宙船演算子というらしいです。かっこいいので宇宙船演算子と呼びます。(宇宙船ぽいからこの名前?)

<?php
    $n = intval(trim(fgets(STDIN)));

    $a = [];
    for ($i = 0; $i < $n; $i++) {
        [$a0, $a1] = explode(' ', trim(fgets(STDIN)));
        $a[] = [$a0, $a1];
    }
    // 上記の処理は2次元配列を作成する

上の処理は割愛。

    usort($a, function ($a, $b) {
    // ユーザー定義の比較関数を使用して配列をソートする
        return $a[1] <=> $b[1];
        // 2列目のほうが優先度が低いので、宇宙船演算子を使い、先にソート
    });
    usort($a, function ($a, $b) {
        return $a[0] <=> $b[0];
        // 1列目のほうが優先度が高いので、宇宙船演算子を使い、あとにソート
    });

上記のsortが肝になると思います。
連想配列で試しましたが、重複する値があるので、sortした際に重複した値が消えてしまい使えません。
なので二次元配列で考えてみました。そして、値が重複した際にも比較ができるような、ユーザー定義のsort関数を作成しました。
そこで宇宙船演算子(かっこいい...)を使用しています。
処理の細かい解説は、コメントを参照してください。

    foreach ($a as $pair) {
        echo implode(' ', $pair) . "\n";
    }
?>

あとは、出力して完了です。

参考文献

こちらの記事を参考にさせていただきました。

問題

0
0
2

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