スタック・キューメニュー】> STEP: 5 エスカレーター (paizaランク B 相当) [難易度: 1710 ±36]

※リンク先へ移動するためには[paiza]へのログインが必要です。

問題文

paiza ビルにあるエスカレーターは全長 K メートルあり、 1 秒で 1 メートル進みます。また paiza ビルに勤める社員が N 人おり、 i 番目の社員は時刻 A_i にエスカレーターに乗ります。各社員がエスカレーターに乗った直後に、エスカレーター上にいる人数をそれぞれ答えてください。ただしある時刻にエスカレーターに乗る社員と降りる社員がいた場合、これは同時におこなわれます。

入力値(例)
4 3
1 3 4 6

出力値(例)
1
2
2
2

解答例

解説

エレベーターに乗ってきた人を配列$queに入れます。

配列(リスト)の最後に要素を追加する(array_push)

乗る人がいない場合は、0を追加します。

//$que = [1, 0]

そして、降りる人を先頭の要素から削除します。

配列(リスト)の先頭の要素を削除する(array_shift)

//$que = [0]

配列の右から入って左から出ていく、というイメージです。

はじめに、先頭に要素を追加するarray_unshift()を使っていたら他のケースで通過できず悩んでいました。右から入れて左から出すのイメージにしたら無事に全部通過しました。

おすすめの記事
スポンサーリンク