はじめに
PaizaAランクレベルアップ問題集より
陣取りの結末 (paizaランク B 相当)
この問題に取り組むにあたり、Queueを学んだため自分用にまとめる。
〇キューとスタック
キュー(Queue)
先入れ先出し(FIFO:First in First Out)方式のデータ構造
Queueは、入力されたデータがその順番通りに処理されなければ困る状況で使われる。
スタック(Stack)
後入れ先出し(FILO:First in Last Out)方式のデータ構造
データを追加することを「push」、データを取り出すことを「pop」という。
QueueとStackと聞くと難しく感じるが、取り出す順番が異なるくらいで配列の操作で簡単に実現できる。
そういえば、基本情報の勉強をした時に勉強していた(データの持ち方編)。
参考「キタミ式イラストIT塾 基本情報技術者 平成31年/01年 p556.557」
PHPでのQueueの実装について
array_push()
とarray_shift()
を使って実装できる。
・array_push()
配列の最後に1つ以上の要素を追加する
・array_shift()
配列の先頭から要素を一つ取り出す。
取り出した後は、配列内の要素は前にずれる。数値添え字の配列の場合、キーは0から順に新たに振りなおされるが、リテラル(文字)のキーには影響しない
イメージ画像
Paiza問題集 ざっくり解説(自分用)
こちらの問題であればざっくりとした流れは以下のイメージ
1.初期位置の取得しQueueに格納(array_push)
2.Queueから先頭のデータを取り出し(array_shift)、その位置の上下左右が移動可能かどうか判定
→移動可能であれば、移動後の位置を取得しQueueに格納
3.Queueの中身がなくなるまで2を繰り返す。
移動した箇所を「*」に置き換える等の処理は省いているが、大まかな処理の流れはこんな感じ(多分)
参考
【Java】一目でわかるキューとスタック!データ管理をラクにしよう!
PHPにおけるStackとQueue
array_push
array_shift