【paiza】スキルチェック過去問題セット :検索履歴 (paizaランク C 相当) 解答例 – PHP編
挑んだ時はマジもんのPHP初心者だったこともあり、最初はどうすれば出力例のような結果を再現できるのか悩みましたが、少し考えれば分かる事でした。
解答例
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
<?php $input_line = trim(fgets(STDIN)); //繰り返し数を取得 for($i =0;$i < $input_line;$i++){ //指定された回数分、単語を取得し配列に保存 $array[] = trim(fgets(STDIN)); } $box = array(); //「$box」という空の配列を作成 foreach($array as $value){ array_unshift($box,$value); //「$array」の単語を、「$box」の先頭へ追加 $box = array_unique($box); //「$box」の重複した値を削除する } foreach($box as $value){ echo $value."\n"; } ?> |
「検索ワード W が以前に入力されたことがある場合:履歴中の W を削除する。
履歴の先頭に W を追加する。
検索ワード W が以前に入力されたことがない場合:履歴の先頭に W を追加する。」
と「入力されたことがない場合~」と条件分岐が必要そうで、少々複雑に書かれていますが、考えてみれば「単語を先頭に差し込んで、重複分の削除」の繰り返しです。この二つ動作は「array_unshift()」と「array_unique()」を使用することで簡単に再現することができます。