09 過去問演習ー2(全分野 横断・2周目)

全20問。1周目とは別の問題です。

配列問1 ★2次元配列を移し替える流れ図

過去問(配列)
出典:IPA 基本情報技術者試験 科目A(旧・午前)過去問〔2018-07-22 問5〕
解説を表示

正解:エ

配列 A の「*」を、流れ図(i を 0〜7、その中で j を 0〜7 まで回す二重ループ)ですべて配列 B の別の場所へ写す問題です。空欄 a の代入式を選びます。

まず A がどんな形かを見ます。左端の列(j=1)に縦一本、上端の行(i=0)に横一本、真ん中あたり(i=3)にも横一本がある「F」のような形です。これが B ではどこへ動いたかを、目印になる「*」で追いかけます。

A の上端の横棒 A(0,1)〜A(0,6) は、B では一番右の列(j=7)に縦に並んでいます。つまり「行の位置」が「列の位置」に化けています。1つだけ座標を代入して確かめます。

Aの位置選択肢エ B(j, 7−i) で写る先Bの実際
A(0,1)B(1, 7)右列の上のほうに* … 一致
A(0,6)B(6, 7)右列の下のほうに* … 一致
A(7,1)B(1, 0)第1行の左端に* … 一致

A の縦棒 A(0,1)〜A(7,1)i が 0→7)はエだと B(1, 7)〜B(1, 0)、つまり第1行が左まで全部*になります。図3の第1行がまるごと*なのと一致します。

他の選択肢との違い

速解法:「横に伸びた棒が縦に立った」=行と列が入れ替わった、とわかった時点で B(●, ●) の中身が (j, …) で始まる選択肢(イかエ)に絞れます。あとは端の1点 A(0,1) を入れて、左右が合うほうを選べば一発です。

スタック問2 ★逆ポーランド記法(式の復元)

過去問(スタック)
出典:IPA 基本情報技術者試験 科目A(旧・午前)過去問〔2020-01-26 問6〕
解説を表示

正解:ウ

逆ポーランド記法(後置記法)は「演算子を2つの値の“後ろ”に書く」書き方です。読むときは左から順にたどり、値はスタックに積み、演算子が来たら直前の2つを取り出して計算し、結果をまた積むという手順で元の式に戻せます。

EF-G÷CD-AB+÷+ を左から1文字ずつ処理します(「直前2つ」の順番に注意:先に取り出したほうが右側の値)。

読む記号やることスタックの中身(左が底)
E, F積むE, F
E と F を取り出し (E−F)(E−F)
G積む(E−F), G
÷(E−F) と G で (E−F)÷G(E−F)÷G
C, D積む(E−F)÷G, C, D
C と D で (C−D)(E−F)÷G, (C−D)
A, B積む(E−F)÷G, (C−D), A, B
A と B で (A+B)(E−F)÷G, (C−D), (A+B)
÷(C−D) と (A+B) で (C−D)÷(A+B)(E−F)÷G, (C−D)÷(A+B)
残り2つを足す((E−F)÷G) + ((C−D)÷(A+B))

最後に残った ((E−F)÷G)+((C−D)÷(A+B)) がウそのものです。

他の選択肢との違い:最後の演算子が なので、一番外側の計算は「たし算」でなければなりません。エは一番外が ÷ なので不適。ア・イは (A+B)(E−F) の作られ方(後置の順序)が式と合いません。

速解法:後置記法は「一番右の演算子=最後に行う一番外側の計算」です。この式の末尾は なので、外側が「÷」のエをまず消せます。次に末尾から2つ目のかたまりを見て、÷ でつながる形(ウ)に決まります。

スタック問3 ★PUSH/POP後のスタック

過去問(スタック)
出典:IPA 基本情報技術者試験 科目A(旧・午前)過去問〔2020-01-26 問8〕
解説を表示

正解:イ

スタックは「あとに入れたものを先に取り出す(LIFO)」箱です。PUSH は一番上に乗せ、POP は一番上を取り除きます。10個の命令を実行した後の一番下(=最初のほうに入れて残ったもの)が何かを追います。

命令は次の順(PUSH が7回、POP が3回)です。PUSH には入れた順に P1〜P7 と番号を付けて追跡します。

手順命令スタック(左が下・右が上)
1PUSH(P1)… P1
2PUSH(P2)… P1, P2
3POP… P1(P2が出る)
4PUSH(P3)… P1, P3
5PUSH(P4)… P1, P3, P4
6PUSH(P5)… P1, P3, P4, P5
7PUSH(P6)… P1, P3, P4, P5, P6
8POP… P1, P3, P4, P5(P6が出る)
9POP… P1, P3, P4(P5が出る)
10PUSH(P7)… P1, P3, P4, P7

問題文は「ある状態から」始めているので、スタックには最初から入っていた古いデータ(図の一番下の 29)があります。今回の10命令で入れて残ったのは、下から順に P1, P3, P4, P7 の4つです。これを図の上から 192, 55, 326, 7 に、その下の 29 は元からあったデータに対応させます。

図の位置(上→下)正体
192(一番上)P7(10番目に入れた)
55P4
326P3
7P1(1番目のPUSH)
29(一番下)元からあった古いデータ

よって1番目のPUSHで入れたデータは 7 です。

他の選択肢との違い:29(ア)はこの10命令より前から入っていた無関係なデータ。326(ウ)は4番目のPUSH、55(エ)は5番目のPUSHにあたり、いずれも「1番目」ではありません。

速解法:残る個数だけ先に数えると速いです。PUSH7回・POP3回なので今回ぶんは差し引き4個残ります。図の下から4個が今回のもの、5個目(29)は元から。今回ぶんの一番下=最初のPUSHなので、下から4個目の 7 が答えです。

スタック問4 ★スタックが適する処理

過去問(スタック)
出典:IPA 基本情報技術者試験 科目A(旧・午前)過去問〔2018-06-10 問6〕
解説を表示

正解:イ

スタックは「あとに入れたものから先に取り出す(後入れ先出し・LIFO)」構造です。どの処理がこの性質にぴったり合うかを選びます。

イは「途中結果をいったんしまい込み、別の計算をしてから、直前にしまった途中結果を取り出して使う」という流れです。これは最後にしまったものを最初に取り出すというスタックの動きそのもので、電卓の計算やカッコ付きの数式の処理でよく使われます。

他の選択肢との違い

速解法:選択肢の中から「取り出す順番=入れた順」(ア=キュー)と「中間を操作」(ウ・エ=配列やリスト)を先に消すと、残るイが自動的に答えになります。

スタック/キュー問5 ★スタックとキューの複合手続

過去問(スタック/キュー)
出典:IPA 基本情報技術者試験 科目A(旧・午前)過去問〔2021-01-24 問7〕
解説を表示

正解:イ

スタック(後入れ先出し)とキュー(先入れ先出し)を同時に使う手続きです。関数の意味は、push(y)=スタックに積む、pop()=スタックの一番上を取り出して返す、enq(y)=キューの末尾に入れる、deq()=キューの先頭を取り出して返す、です。関数の引数の中身(enq(pop()) など)は先に内側を実行します。1行ずつ両方の中身を追います。

手続きやることスタック(左が下)キュー(左が先頭)
push(a)a を積むa(空)
push(b)b を積むa, b(空)
enq(pop())pop で b を取り出し、それをキューへab
enq(c)c をキュー末尾へab, c
push(d)d を積むa, db, c
push(deq())deq でキュー先頭 b を取り出し、それを積むa, d, bc
x ← pop()スタックの一番上 b を取り出すa, dc

最後の pop() で取り出されるのはスタックの一番上にある b なので、x には b が入ります。

他の選択肢との違い:a(ア)はスタックの一番下でまだ取り出されていない。c(ウ)はキューの中に残ったまま。d(エ)は b の下にあり、最後の pop では取り出されません。

速解法:注目は最後の pop()=スタックの一番上だけ。直前の push(deq()) でキュー先頭 b を積んだので、その b がそのまま取り出されます。キューの先頭は最初に enq(pop()) で入れた b なので、答えは b と即断できます。

キュー問6 ★キューの ENQ/DEQ

過去問(キュー)
出典:IPA 基本情報技術者試験 科目A(旧・午前)過去問〔2020-06-14 問8〕
解説を表示

正解:ウ

待ち行列(キュー)は「先に入れたものから先に取り出す(先入れ先出し・FIFO)」構造です。ENQ n は末尾に n を追加、DEQ は先頭を取り出します。操作を順に並べてトレースします。

操作取り出される値待ち行列(左が先頭)
ENQ 11
ENQ 21, 2
ENQ 31, 2, 3
DEQ12, 3
ENQ 42, 3, 4
ENQ 52, 3, 4, 5
DEQ23, 4, 5
ENQ 63, 4, 5, 6
DEQ34, 5, 6
DEQ45, 6
次の DEQ56

ここまでで取り出された順は 1→2→3→4。次の DEQ で先頭にいるのは 5 です。

他の選択肢との違い:1(ア)・2(イ)はすでに取り出し済み。6(エ)は最後に入れたばかりで、まだ 5 の後ろに並んでいます。

速解法:キューでは「入れた順にそのまま出る」ので、取り出しは 1,2,3,4,5,… の順と決まっています。すでに DEQ が4回済んでいる(1〜4が出た)ので、次に出るのは自然と5番目に入れた 5 です。

リスト問7 ★連結リストの特徴

過去問(リスト)
出典:IPA 基本情報技術者試験 科目A(旧・午前)過去問〔2023-12-10 問5〕
解説を表示

正解:エ

配列と連結リストの違いを問う問題です。ポイントは2つ。配列は番号で一発アクセスできる(ランダムアクセス可)が、途中への挿入・削除では後ろの要素をずらす必要がある。連結リストは各要素が「次の要素の場所(ポインタ)」を持ってつながっており、挿入・削除はポインタの付け替えだけで済むが、目的の要素へは先頭から順にたどるしかない、という点です。

エは「挿入は数個のポインタを書き換えるだけなので短い」。連結リストの最大の長所そのものなので正しい記述です。

他の選択肢との違い

速解法:「ランダムアクセス」「後ろの要素をずらす」と書いてあれば配列の説明=連結リストとしては不適、と切り分けられます。残る「ポインタを書き換えるだけで挿入できる」がリスト本来の長所で、これがエです。

リスト問8 ★双方向リストへのノード挿入

過去問(リスト)
出典:IPA 基本情報技術者試験 科目A(旧・午前)過去問〔2019-12-08 問8〕
解説を表示

正解:ウ

双方向リストは、各要素が「次の要素の場所(次ポインタ)」と「前の要素の場所(前ポインタ)」の両方を持ちます。まず追加前のつながりを読み取ります。

つまり並びは A → K → T です。ここに社員G(400)を A と K の間へ入れ、A → G → K → T にします。変わるのは「差し込む隙間の両側だけ」なので、そこだけ確認します。

ポインタ意味追加前追加後変化
a社員Aの次300(K)400(G)変わる
b社員Aの前00変わらない
c社員Tの次00変わらない
d社員Tの前300(K)300(K)変わらない
e社員Kの次200(T)200(T)変わらない
f社員Kの前100(A)400(G)変わる

Gを差し込むと、A の「次」は G を指すよう変わり(a)、K の「前」も G を指すよう変わります(f)。社員T は隙間から離れているので、その次・前(c・d)は無関係で不変。K の「次」(e)も T のままで変わりません。よって変わるのは a と f だけ。

他の選択肢との違い:ア(a,b,e,f) は変化しない b・e を含み過剰。イ(a,e,f) は変化しない e を含む。エ(b,e) は実際に変わる a・f を含まず不足。ちょうど a・f だけのウが正解です。

速解法:双方向リストの「間に1個入れる」では、書き換わるのは必ず差し込む位置の左側の“次”と右側の“前”の2本だけ(新ノード自身のポインタは別途セット)。ここでは左=Aの次(a)、右=Kの前(f)。この2本、と覚えておけば即答できます。

木構造問9 ★2分木のテキスト表現

過去問(木構造)
出典:IPA 基本情報技術者試験 科目A(旧・午前)過去問〔2023-01-22 問7〕
解説を表示

正解:ウ

表現のルールは「(左部分木, 節番号, 右部分木)」で、部分木が無いところは x と書く、というものです。図の木を読み取ると、根は節3で、左の子が節2、右の子が節5。さらに、節2は左の子が節1だけ(右の子は無い)、節5は左の子が節4・右の子が節6です。

葉から順に文字にしていきます。

よって正解はウ。

なぜ他は違うのか:アは節2を (1, 2) と2つ組にしていて、右の子が無いことを x で示せていない(形が違う)ので誤り。イは (1, 2, 3) のように節3を節2の右の子に入れてしまい、根が3であることと矛盾。エは右部分木を (6, 5, 4) と左右逆に並べていて、節4が左・節6が右という図と合わないので誤り。

速解法:まず根がどれかを見て、いちばん外側のカッコの真ん中の数字が根と一致する選択肢に絞る(真ん中は3のはず)。次に「子が片方しか無い節2は必ず x が入る」ことを手がかりにすると、x を正しい位置に置いたウだけが残ります。

木構造問10 ★2分探索木の判定

過去問(木構造)
出典:IPA 基本情報技術者試験 科目A(旧・午前)過去問〔2018-01-28 問5〕
解説を表示

正解:イ

2分探索木のルールはただ一つ、「どの節点でも、左側にあるものは全部その節点より小さく、右側にあるものは全部その節点より大きい」です。ここで大事なのは「直接の子だけでなく、その下にぶら下がる全部」がこの条件を満たすことです。1か所でも破れていたらアウトなので、各選択肢を上から順にチェックします。

速解法:親と子の大小だけでなく、「小さい方の子は左、大きい方の子は右」を全部の節点で確認するだけ。特に「右の子なのに親より小さい数」を見つけたら即アウト、という目で探すと速いです。ア・ウ・エはいずれもこのパターンで外れます。

木構造問11 ★完全2分木の性質

過去問(木構造)
出典:IPA 基本情報技術者試験 科目A(旧・午前)過去問〔2023-06-11 問5〕
解説を表示

正解:エ

問題の木は「葉以外は必ず子が2つ」「根から葉までの深さが全部同じ」というきれいに詰まった2分木(完全に埋まった2分木)です。深さは根から葉までの枝の本数で数えます。小さい例で確かめると法則がすぐ見えます。

たとえば深さ2の木(節点は根1個+その下2個+さらに下4個=合計7個、葉は4個)で各選択肢を検証します。

選択肢主張深さ2の例(葉4・節点7・枝6)で検算
枝の数nなら節点もn枝6に対し節点は7。節点=枝+1なので誤り
深さnなら葉は2の(n-1)乗深さ2なら葉は2の2乗=4のはず。2の1乗=2では合わず誤り
節点nなら深さはlog2 n節点7でlog2 7は約2.8。深さは2なので合わず誤り
葉nなら葉以外の節点はn-1葉4に対し葉以外は3=4-1。ぴったり合う

エが正しい理由をもう少し。この形の木では、根から順に節点が2倍ずつ増えていくので、葉の数がちょうど(葉以外の節点の数)+1になります。だから葉がn個なら、葉以外はn-1個です。

速解法:迷ったら「深さ1の一番小さい木(節点3個・葉2個・枝2本)」や「深さ2の木」を実際に描いて数を当てはめるのが最速で確実。公式を暗記するより、小さい例で選択肢を1つずつ潰すのがおすすめです。

グラフ問12 ★グラフの隣接行列

過去問(グラフ)
出典:IPA 基本情報技術者試験 科目A(旧・午前)過去問〔2022-07-24 問2〕
解説を表示

正解:エ

隣接行列は「どの節点とどの節点が枝でつながっているか」を表です。第 i 行 第 j 列が 1 なら、節点 Vi と Vj の間に枝があります。行ごとに 1 の場所を読み取って、枝の一覧を作ります。

1 が立っている列読み取れる枝
1行目 (0 1 1 0)2列・3列V1-V2、V1-V3
2行目 (1 0 0 1)1列・4列V2-V1、V2-V4
3行目 (1 0 0 1)1列・4列V3-V1、V3-V4
4行目 (0 1 1 0)2列・3列V4-V2、V4-V3

重複を除くと、枝は V1-V2、V1-V3、V2-V4、V3-V4 の4本です。逆に V1-V4 はなく、V2-V3 もない点が重要です。各節点の枝の本数(次数)はすべて2本ずつになります。

この4本の枝をちょうど持ち、V1-V4 と V2-V3 を持たない図はエです。エは V1 が V2・V3 とつながり、真ん中の V4 が V2・V3 とつながっていて、これが上の一覧と完全に一致します。よってエが正解です。

他の選択肢がなぜ違うか。

速解法:行列は左上から右下への対角線を境に上下が鏡写し(対称)になっているはずで、まずそれを確認。あとは「ある枝」より「無い枝」に注目するのが速く、V1-V4 なし・V2-V3 なしを満たす図はエだけなので一発で絞れます。

アルゴリズム問13 ★再帰的プログラムの特徴

過去問(アルゴリズム)
出典:IPA 基本情報技術者試験 科目A(旧・午前)過去問〔2017-07-23 問7〕
解説を表示

正解:イ

「再帰的(リカーシブ)」とは、プログラムが実行の途中で自分自身をもう一度呼び出せる性質のことです。階乗やフィボナッチ、木のたどり方(この回の問7でも登場)などが代表例で、まさにイの説明そのものです。

まぎらわしいのは、名前の似た「再〇〇可能」という別の性質が選択肢に並んでいる点です。区別して覚えましょう。

選択肢説明している性質正しい用語
ロードし直さず何度でも正しく再実行できる再使用可能(リユーザブル)
実行中に自分自身を呼び出せる再帰的(リカーシブ)=これが答え
主記憶のどのアドレスに置いても実行できる再配置可能(リロケータブル)
複数のタスクが同時に共有して実行しても正しい再入可能(リエントラント)

速解法:この4つはよくセットで出題されます。「再帰=自分を呼ぶ」「再使用=もう一度使える」「再配置=どこに置いてもよい」「再入=同時に共有できる」と、キーワードだけ結びつけて暗記しておけば確実に得点できます。

アルゴリズム問14 ★ユークリッドの互除法(再帰)

過去問(アルゴリズム)
出典:IPA 基本情報技術者試験 科目A(旧・午前)過去問〔2018-12-09 問5〕
解説を表示

正解:イ

この関数Fはユークリッドの互除法(2つの数の最大公約数を求める方法)そのものです。「yが0になったら、そのときのxが答え」「yが0でなければ、(y, xをyで割った余り) に置きかえて繰り返す」というルールに従い、ただ計算をたどるだけです。x mod y は「xをyで割った余り」です。

呼び出しxyx mod y(余り)の計算次にどうなる
F(231,15)23115231÷15=15あまり6(15×15=225)F(15, 6) を呼ぶ
F(15,6)15615÷6=2あまり3(6×2=12)F(6, 3) を呼ぶ
F(6,3)636÷3=2あまり0F(3, 0) を呼ぶ
F(3,0)30yが0になったxの値3を返す

yが0になった瞬間のxが答えなので、3、すなわちイです。実際、231と15の最大公約数は3(231=3×7×11、15=3×5)なので、計算が正しいことも確認できます。

速解法:この形の関数を見たら「これは最大公約数を求める互除法だ」と気づけると強いです。あとは表を1行ずつ、割り算の余りを次のyに送るだけ。余りが0になったときの割る数(この問では最後のx=3)が最大公約数=答えになります。ア・ウ・エは途中計算のどこかで割り算の余りを取り違えると出てしまう値ですが、余りを丁寧に出せば3で確定します。

流れ図問15 ★2つの流れ図が同じ結果になる条件

過去問(流れ図)
出典:IPA 基本情報技術者試験 科目A(旧・午前)過去問〔2019-12-08 問10〕
解説を表示

正解:ウ(n > M)

2つの流れ図が同じ x になるようにする問題です。まず左の流れ図が何を計算しているかを確定させ、次に右がそれと同じになる条件を探します。

左の流れ図x←1 のあと、ループで nM から 1 まで −1 ずつ動かしながら x←x×n を繰り返します。つまり

x = M × (M−1) × … × 2 × 1 = M!(M の階乗)

右の流れ図x←1, n←1 のあと、「x←x×n → n←n+1 → 判断a」を繰り返します。判断が Yes なら終了、No ならループの先頭へ戻ります。判断は掛け算のあとにある点が重要です。k 回まわった時点の状態を表にします。

まわった回数 kx(掛けた結果)判断aを見るときの n
1回1×1 = 1 = 1!2
2回1×2 = 2 = 2!3
3回2×3 = 6 = 3!4
k回k!k+1

左と同じ M! にしたいので、ちょうど M 回まわった直後に終了させたい。そのとき n は M+1 になっています。よって条件 a は「n が M+1 以上になったら Yes」= n > M。これがウです。

なぜ他の選択肢が違うか(1回ずれると階乗が丸ごと変わります)

速解法:この手の「後判定ループの条件を埋める」問題は、小さい M で試すのが最速です。たとえば M = 3(左は 3! = 6)とし、右で x が 6 になった瞬間の n を見ると n = 4。n = 4 のとき初めて Yes になる条件を選択肢から探すと、n > 3(=n > M)だけが当てはまります。

計算量問16 ★探索法と計算量オーダ

過去問(計算量)
出典:IPA 基本情報技術者試験 科目A(旧・午前)過去問〔2021-12-12 問5〕
解説を表示

正解:ア

オーダとは「データの数nが増えたとき、処理時間がおよそどのくらいの勢いで増えるか」を表すものです。3つの探索法それぞれの速さを思い出せば選べます。

探索法やり方の要点オーダ(かかる時間の目安)
2分探索整列済みデータの真ん中を見て、範囲を毎回半分に絞るlog2 n(半分ずつなので非常に速い)
線形探索先頭から順番に1個ずつ調べるn(最悪で全部見る)
ハッシュ探索計算した位置に直接アクセスする(衝突は無視できる前提)1(データ数に関係なく一定)

この「log2 n / n / 1」の組合せがそろっているのはアだけなので、答えはアです。

他の選択肢との違い:イは2分探索を n log2 n としていて遅すぎ(これは整列アルゴリズムの目安)。ウは線形探索を n の2乗としていて誤り。エは2分探索を n の2乗、線形探索を1としていて、速い遅いが完全に逆さまです。3つのうちハッシュ探索がデータ数によらず一定(1)で最も速いと押さえておけば、1が入っていないイをまず外せます。

速解法:「2分探索=log、線形探索=n、ハッシュ=1(一定)」の3点セットを暗記しておけば即答できます。半分ずつ絞るものはlog、1個ずつ見るものはn、直接飛べるものは1、と仕組みと結びつけると忘れません。

探索問17 ★ブロック分割した線形探索

過去問(探索)
出典:IPA 基本情報技術者試験 科目A(旧・午前)過去問〔2023-01-22 問9〕
解説を表示

正解:イ

探索は「①どのブロックにあるか探す」→「②そのブロックの中を探す」の2段階です。それぞれの平均比較回数を出して足し算します。

①ブロックを探す段階

②ブロックの中を探す段階

合計m/2 + n/(2m)。これがそのままイの式です。

なぜ他が違う?

速解法:「2段階探索は各段階の平均(=候補数の半分)を足す」。ブロック数 n/m の半分と、ブロック内 m の半分を足すだけ、と覚えるとすぐ選べます。

探索問18 ★2分探索の性質

過去問(探索)
出典:IPA 基本情報技術者試験 科目A(旧・午前)過去問〔2018-12-09 問6〕
解説を表示

正解:ア

2分探索は「まん中を見て、目的が前半か後半かを判断し、探す範囲を毎回半分に絞る」方法です。範囲を半分に切れるのは、データが小さい順(または大きい順)に並んでいる(整列済み)からこそです。だからアが正しい説明です。

なぜ他が違う?

速解法:2分探索のキーワードは「整列済みが前提」「まん中から」「1回で半分に絞る=log₂n」。この3点でほぼ判定できます。

探索問19 ★ハッシュ法の格納場所

過去問(探索)
出典:IPA 基本情報技術者試験 科目A(旧・午前)過去問〔2018-01-28 問6〕
解説を表示

正解:エ

これはハッシュ法で、置きたい場所が埋まっていたら次の候補へずらす(オープンアドレス法)問題です。規則どおり 16→43→73→24→85 の順に置いていき、最後の 85 がどこに入るかを追います(x mod 10 は「10で割った余り」=1の位)。配列は最初すべて0です。

k試す位置の計算結果
1616 mod 10 = 6 → A[6] は0A[6] に格納
4343 mod 10 = 3 → A[3] は0A[3] に格納
7373 mod 10 = 3 → A[3] は使用中。
(73+1) mod 10 = 4 → A[4] は0
A[4] に格納
2424 mod 10 = 4 → A[4] は使用中。
(24+1) mod 10 = 5 → A[5] は0
A[5] に格納
8585 mod 10 = 5 → A[5] は使用中。
(85+1) mod 10 = 6 → A[6] も使用中。
(85+4) mod 10 = 9 → A[9] は0
A[9] に格納

85 は最初の候補(5番)も次の候補(6番)も埋まっていて、規則(3)の (k+4) mod 10 = 9 でようやく空いていた A[9] に入ります。よってエ。

なぜ他が違う?ア A[3]・イ A[5]・ウ A[6] は、いずれも 85 が置こうとしたがすでに埋まっていた場所です。「余りが同じでも先客がいれば次へずらす」ことを見落とすとこれらを選んでしまいます。

速解法:先に 16→43→73→24 の置き場所(6,3,4,5番)をメモしておき、85 の候補 5→6→9 と照らせば一発です。

整列問20 ★クイックソートの説明

過去問(整列)
出典:IPA 基本情報技術者試験 科目A(旧・午前)過去問〔2019-06-09 問5〕
解説を表示

正解:ア

クイックソートは「基準となる値(ピボット)を1つ決め、それより大きいグループと小さいグループに振り分ける(分割する)」のがポイント。分けた各グループでまた同じことを繰り返すと、最後には並びます。これを説明しているのがアです。

なぜ他が違う?(有名な整列アルゴリズムの説明とすり替えてあります)

速解法:クイックソートのキーワードは「基準(ピボット)で大小2つに分割」「それを繰り返す(分割統治)」。この2語があればア確定です。


【練習リンク】