【配列活用メニュー】> 【配列に対しての複雑な処理】STEP: 3 queue (9) 係 (paizaランク C 相当) [難易度: 1387 ±18]
※リンク先へ移動するためには[paiza]へのログインが必要です。
データ構造の queue と同様の働きをするロボットがあります。ロボットは指示に応じて配列 A に対して 2 種類の仕事を行います、仕事の内容は以下の通りです。
・in n
と指示された場合、A の末尾に n を追加してください。
・out
と指示された場合、A の先頭の要素を削除してください。ただし、A が既に空の場合、何も行わないでください。
ロボットに与えられる指示の回数 N と、各指示の内容 S_i が与えられるので、ロボットが全ての処理を順に行った後の A の各要素を出力してください。
なお、初め配列 A は空であるものとします。
入力値(例)
10
out
in 33
out
out
out
out
in -76
out
out
in -53
出力値(例)
-53
解答例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
<?php $n = trim(fgets(STDIN)); $array = array(); for($i = 0; $i < $n; $i++) { $input = trim(fgets(STDIN)); if($input == "out") { array_shift($array); } else { list($head, $tail) = explode(" ", $input); array_push($array, $tail); } } //print_r($array); foreach($array as $value) { echo $value. "\n"; } ?> |
解説
1)$nで1行目を取得します。
2)空の配列$arrayを用意します。
3)for()で$n回の$inputを取得します。
4)$inputを取得しつつ、if()で($input == "out")だったら、配列の先頭の要素を削除する関数array_shift()で配列の要素を削除します。
5)($input == "out")以外は、explode()で$inputを分割($head, $tail)して取得します。
6)配列$arrayに$tailだけ追加します。
7)foreach()で配列の値を一つずつ取得し、出力します。
感想
問題の意味がなかなか理解できなくて、解き方が合っているのか自信がありません。もう少し力がついたらもっとキレイなコードが書けるでしょうか?(*'ω'*)