アルゴリズムとプログラミング

基本情報技術者試験スタック・キュー」の問題

アルゴリズムとプログラミングアルゴリズムとプログラミング計算問題難易度:normal
印刷ジョブを先着順(FIFO)で処理するキュー q がある。各ジョブは (id, ページ数) を持ち、deq したジョブのページ数を累計し、累計が初めて 5 ページ以上になった時点のジョブの id を返す。初期キュー(先頭→末尾)が {(A,2),(B,1),(C,3),(D,4)}(先頭=A)のとき、戻り値はどれか。enqueue/dequeue は末尾追加/先頭取り出し、isEmpty は空判定を表す。
○文字列型: firstReach()
  キュー: q ← {(A,2),(B,1),(C,3),(D,4)}
  整数型: acc ← 0
  ジョブ: job
  while (q.isEmpty が false)
    job ← q.dequeue()
    acc ← acc + job.ページ数
    if (acc ≧ 5)
      return job.id
    endif
  endwhile
  return "なし"
ジョブ B(累計3で誤判定)
ジョブ C
ジョブD
ジョブ A
正解
ジョブ C

FIFO で A,B,C,D の順に処理し、ページ数を累計する。2→3→6 と進み、C を加えた時点で初めて 5 以上になるため、返る id は C となり イが正しい。

?選択肢ごとの解説

ア ×B を加えた時点の累計 3 を 5 以上と誤認した、しきい値判定を早まった誤りである。
イ ○FIFO で A,B,C,D の順に処理し、ページ数を累計する。2→3→6 と進み、C を加えた時点で初めて 5 以上になるため、返る id は C となり イが正しい。
ウ ×D まで処理しないと 5 に届かないと誤認した、C で既に 6 に達する点を見落とした遅れの誤りである。
エ ×先頭の A で即達すると誤認した、A 単独の 2 ページでは 5 に満たない点を無視した誤りである。

くわしく

FIFO の先着順処理では、しきい値に『初めて』到達する瞬間を正しく捉える必要がある。累計が等号を含む条件(≧5)で判定されるため、ちょうど 5 や超過する最初のジョブを取り違えないことが核心である。

本番での押さえどころ

試験のコツ

処理したジョブと累計を表に並べ、初めて条件を満たした行の id を読む。

覚え方

『先頭から足していき、初めて超えた人が答え』と順序を固定する。

よくある誤り

累計の更新タイミングを誤り、1 つ前または後のジョブを答えるミスが多い。

アルゴリズムとプログラミングの他の問題

この問題を、AIの8-ways解説つきで。

基本情報技術者試験の演習を、一問ごとに「なぜ」まで。まずは無料で。

無料ではじめる →

ukamiru 過去問 · 基本情報技術者試験 · fe-b-algo-0105

【基本情報技術者試験】スタック・キューの問題 — 解答・解説|ukamiru 過去問