夏休み 5 日目

地元の画像です

こんにちは!

こんな田んぼしかない田舎が故郷のひじきです。
(この画像は,帰りの電車の窓から撮影しました)

無事に,第 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 したら終わりじゃん」と馬鹿なことを考えてたのを
今でも覚えています。

…そういう意味では,私のおバカな脳みそもちょっとは成長したのかもしれません。

comments