基本情報技術者試験の令和7年度の公開問題(科目B)を解こう。
今回のテーマは、「スタックへの格納と取り出し操作」である。
令和7年度 基本情報技術者試験 科目 B 公開問題 問3


正解:イ
アルゴリズム問題は、一見難しそうに見えるが、「データが今どうなっているか」を丁寧に追いかけると、正解にたどり着くことができる。
1. 問題の全体像を把握しよう
まずは、このプログラムのルール(仕様)を確認しよう。
- Stack(スタック): 「後入れ先出し(LIFO)」のデータ構造。机に積んだ本のように、最後に置いたものを最初に取り出す。
- stackPos(スタックポインタ): 今回の最重要ポイントである。図を見ると、「次に値を入れる位置」を指している。
- 要素番号: 1から始まる。
図から読み取れる「初期状態」
stack:[4, 3, 未, 未](要素数は4)stackPos: 3 を指している- つまり、次に
pushしたら 3番目 にデータが入る。
- つまり、次に
2. 空欄 [ a ] を考える:push(追加)の仕組み
push 関数は、「新しいデータをスタックに置く」処理である。
if (stackPos ≦ stackの要素数)
stack[ a ] ← inputData
stackPos ← stackPos + 1
return true- どこに入れる?:
stackPosの説明に「次に値を格納する位置を示す」とある。初期状態でstackPosは「3」なので、3番目にデータを入れたい。 - そのまま使う?: したがって、
stack[stackPos]にデータを入れればOKである。 - 入れた後は?: 次に備えて
stackPosを 1 増やしている(プログラムの次の行)。
よって、[ a ] = stackPos となる。
3. 空欄 [ b ] を考える:pop(取り出し)の仕組み
pop 関数は、「最後に入れたデータを取り出す」処理である。ここが少しトリッキーである!
if (stackPos > 1)
stackPos ← b
popData ← stack[stackPos]
stack[stackPos] ← 未定義の値
endif
return popData- 現在の stackPos はどこ?: 初期状態(stackPos=3)で考えよう。今、データが入っているのは「2番目」までである。3番目は空(未定義)である。
- 取り出したいのはどこ?: 最後に入れたのは「2番目」のデータ
3である。 - どう動かす?:
stackPos(今は3)を 1つ戻して「2」にする 必要がある。 - 代入する: その後、
stack[stackPos](つまりstack[2])の値をpopDataに格納している。
この流れを作るには、まず stackPos を 1 減らさなければならない。
したがって、[ b ] = stackPos – 1 となる。
4. 結論
- [ a ]:次に格納する位置そのものを使うので
stackPos - [ b ]:データがある位置まで戻す必要があるので
stackPos - 1
解答群からこれに一致するものを選ぶと…… 正解は「イ」 となる。
💡 初学者へのアドバイス
科目Bのスタックやキューの問題で迷ったら、「具体的な数字を入れてトレース」するのが鉄則である。
- 「今
stackPosが 3 だから、pushするなら 3 番目だな」 - 「取り出すなら、一個前の 2 番目だな」
これだけで、複雑な式を暗記しなくても正解に辿り着ける。


コメント