• ベストアンサー

(ソフ開)(平成19年秋午前問題)問9の質問

こんにちは。 表題の問題、教えていただきたいです。 問題のテキストをコピーできないので、リンクを書きます。 http://www.jitec.jp/1_04hanni_sukiru/mondai_kaitou_2007h19_2/2007h19a_sw_am_qs.pdf 私の理解としては、A、B、Cの順序で入力するとしたら、Cを取り出すために、 1回でできる。Bを取り出すために、C,Bを出力するから、2回。 Aを取り出すために、C,B,Aを出力するから、3回。 ですから、全部で1+2+3=6回と思いますが、 なぜ答えが5回でしょうか。 そもそもこの問題の題意を理解を理解できていないのかな。 お分かりになる方がいらっしゃいましたら、ぜひご教授ください。 よろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • jjon-com
  • ベストアンサー率61% (1599/2592)
回答No.2

ANo.1が正解。(それが言いたかっただけです,すみません。「自信あり」じゃなく「参考意見」になってたもので) 以下,蛇足です。(I)がpushで (O)がpop,左から右へとスタック操作を示しているので, (I)(I)(I)(O)(O)(O)…出力順序はCBA (I)(I)(O)(I)(O)(O)…出力順序はBCA (I)(I)(O)(O)(I)(O)…出力順序はBAC (I)(O)(I)(O)(I)(O)…出力順序はABC (I)(O)(I)(I)(O)(O)…出力順序はACB ということで,残ったCABは1つのスタックだけでは出力できません。

その他の回答 (2)

回答No.3

さらに蛇足を。 この条件下だと「CAB」はなぜ出力不可能なのか?についてです。 スタック問題を解くためには、「入力したデータは底にたまる」「1回の出力で取り出せるデータは、一番上にたまっているデータのみ」ということを知っていることが前提となります。 ゆえに、「Aを、Bよりも先に出力させる」ためには「Aが出力候補になっている、という条件のもとで、Bが入ってくる前にAを出力させる」以外の方法はありません。 ANo.2番さんが指摘しておられる「ABC、ACB」の2つが、これに該当します。 ----- という前提はおいておいて、「CABはなぜ出せないの?」という話の本編です。 この問題の設定では、「A,B,Cの順番で入力する」とあります。「BよりもAを先に出力する」ためには、少なくとも「Bが入力される前に」Aの出力処理をしなけれならないのは、前述の通りです。とりあえず、「CAB」になりそうなデータ処理を追いかけてみます。 「CAB」を実現しようと思ったら、まずは、「Cを最初に出力」する必要があります。なので、とりあえず「A、Bのデータをスタックに入力し、Cの入力を待つ」方法をとらないと、Cを最初に出力することはできません。 で、Cを取り出したあとのAとBのデータは、スタック内ではこのようになっています。 |からっぽ| |データB| |データA| ------ 「CAB」を完成させるには、次にAを出力するしかありません。しかし、上の図、および「取り出しのルール」上、次に取り出せるデータはBのみです。なので、どうしても次に「Aを出力すること」は不可能なのです。 ゆえに、「CAB」はこの問題においては不可能、と結論づけられます。

o_0xlx0_o
質問者

お礼

なるほど、よく理解できました。 皆さんのご回答、ありがとうございました。 今後とも、よろしくお願いします。

noname#63784
noname#63784
回答No.1

ABCの並び方なら3*2*1=6通りですが 挿入3回、取り出し3回の組み合わせですから また最初は(I)、最後は(O)と決まり さらに(I)していないのに(O)はできませんから (I)(I)(I)(O)(O)(O) (I)(I)(O)(I)(O)(O) (I)(I)(O)(O)(I)(O) (I)(O)(I)(O)(I)(O) (I)(O)(I)(I)(O)(O) の5通りでよいのではないかと思います

関連するQ&A