IPA過去問ドリル

平成23年度 秋期 基本情報技術者試験 午前 問5

テクノロジ/アルゴリズム

スタック1,2があり,図の状態になっている。関数fはスタック1からポップしたデータをそのままスタック2にプッシュする。関数gはスタック2からポップしたデータを出力する。b,c,d,aの順番に出力するためには,関数をどの順で実行すればよいか。

平成23年度 秋期 基本情報技術者試験 午前 問5の図

出典:平成23年度 秋期 基本情報技術者試験 午前 問5

正解:イ

解説

スタック1は上からa,b,c,dの順に積まれており,関数fで1回ポップするたびに上から順にa,b,c,dが取り出されてスタック2に積まれます。b,c,d,aの順で出力するには,まずa,bをポップしてスタック2に積み(この時点でスタック2は上からb,a),gでbを出力,続けてcをポップして積み,gでcを出力,dをポップして積み,gでdを出力,最後にgでaを出力する,という手順になります。これを関数の並びで表すとf, f, g, f, g, f, g, gとなります。

選択肢ごとの解説

  • 誤り。この順序では最初にa,b,cを連続でポップしてしまい,出力順がb,c,d,aとはなりません。
  • 正しい。f,f,g,f,g,f,g,gの順に実行すると,スタック2からb→c→d→aの順に出力されます。
  • 誤り。g,gが連続する位置があり,スタック2に積まれたデータの順序と合わず,指定の出力順になりません。
  • 誤り。f,fの後にg,gと連続してポップすると,出力順がb,a,…となってしまい,指定の順序と一致しません。
基本情報技術者の過去問を演習モードで解く