こんにちは!
こんな田んぼしかない田舎が故郷のひじきです。
(この画像は,帰りの電車の窓から撮影しました)
無事に,第 2 章のテキストを読み終えたので,章末問題にチャレンジしたわけですが,
昨日の自分メモが絡んだ問題がかなりあったおかげで,そこそこの出来でした!
間違ってしまった…というわけではないのですが,
なんとなくお気に入りなので,この問題を紹介しておきます(笑)
[問題]
A,B,C の順序で入力されるデータがある。各データについてスタックへの挿入と取出しを 1 回ずつ任意のタイミングで行うことができる場合,データの出力順序は何通りあるか。
(ア) 3 (イ) 4 (ウ) 5 (エ) 6
この問題の解き方は,非常に単純に,
実際にすべての場合について考えていけば良いのですが,
その際に注意しなければいけないのは,
「スタックからデータを取り出す(pop)には,
スタック内にデータが残っていないといけない」
という点についてです。
このことから,まずはスタックにデータを入力(push)しなければならないので,
最初の操作として,pop が来ることはない,というのが分かります。
これらをふまえて,すべての場合について考えてみると,
以下の 5 通りになります。
(1) push(A) — pop(A) — push(B) — pop(B) — push(C) — pop(C)
→ 取り出された順番は,A・B・C の順。
(2) push(A) — push(B) — pop(B) — push(C) — pop(C) — pop(A)
→ 取り出された順番は,B・C・A の順。
(3) push(A) — pop(A) — push(B) — push(C) — pop(C) — pop(B)
→ 取り出された順番は,A・C・B の順。
(4) push(A) — push(B) — pop(B) — pop(A) — push(C) — pop(C)
→ 取り出された順番は,B・A・C の順。
(5) push(A) — push(B) — push(C) — pop(C) — pop(B) — pop(A)
→ 取り出された順番は,C・B・A の順。
したがって,正解は (ウ) です。
ちなみに,昨年もこの問題にチャレンジしたことがあり,
そのときは,各データに対して,push と pop を 1 回ずつ行えるのではなく,
それぞれの操作が全体で 1 回ずつしか行えないんだと勘違いして,
「そんなの,A を push して pop したら終わりじゃん」と馬鹿なことを考えてたのを
今でも覚えています。
…そういう意味では,私のおバカな脳みそもちょっとは成長したのかもしれません。