アルゴリズムとプログラミング

基本情報技術者試験値スタック valStk と最大値スタック maxStk の 2 本を使い、push…

アルゴリズムとプログラミングアルゴリズムとプログラミング計算問題難易度:hard
値スタック valStk と最大値スタック maxStk の 2 本を使い、push 時に「これまでの最大値」も同時に積むことで、頂上の最大値を即座に参照できるスタックを作る。push(x) では valStk に x を積み、maxStk には「x と現在の maxStk.top のうち大きい方(maxStk が空なら x)」を積む。pop は両スタックの頂上を同時に取り出す。空の状態から次を実行したとき、最後に maxStk.top が返す値(現在の最大値)はどれか。
○手続: run()
  push(40)
  push(90)
  push(60)
  pop()
  push(20)
  getMax()      // maxStk.top を返す
110(90と20の和とする誤り)
90(現在の最大値)
60
40
正解
イ.90(現在の最大値)

maxStk は各時点の最大値を保持する。60 を pop すると maxStk も縮んで頂上は 90 になり、20 を push しても max(20,90)=90 が積まれる。最終 maxStk.top=90 となるため イが正しい。

?選択肢ごとの解説

ア ×最大値を求めるべきところを最後に積んだ 20 と頂上の 90 を加算して 110 とした、max を和と取り違えた誤りである。
イ ○maxStk は各時点の最大値を保持する。60 を pop すると maxStk も縮んで頂上は 90 になり、20 を push しても max(20,90)=90 が積まれる。最終 maxStk.top=90 となるため イが正しい。
ウ ×pop した値 60 がまだ最大として残っていると誤認した、pop で maxStk も同時に縮む点を見落とした誤りである。
エ ×最初に push した底の値 40 を最大値とした、後続の 90 で最大が更新される点を見落とした誤りである。
この問題の「深掘り・誤答の完全解説・覚え方」は、登録すると読めます。

基本情報技術者試験は全4,036問。公開しているのはその一部で、登録すると残りも一問ごとにAI解説つきで解けます。SRS暗記カード・全真模試・弱点診断まで。

登録は1分・クレジットカード不要。無料のまま練習・暗記カード・模試まで使えます。

作成・校閲:ukamiru編集部 · 基本情報技術者試験 過去問 · fe-b-algo-0103

【基本情報技術者試験】値スタック valStk と最大値スタック maxStk…|正解「90(現在の最大値)」|ukamiru 過去問