CO-P30情報Ⅰ 対策問題

コンピュータとプログラミングプログラミング特訓 (第3問対策)

待ち行列のシミュレーションを行う。客iの対応開始時刻は「自分の到着時刻」と「前の客の対応終了時刻」の遅い方である。空欄【ア】に入るものはどれか。 【関数の説明】 大きい方(x, y) … xとyのうち大きい方の値を返す (1) taiken = 4 (1人の対応時間: 4分) (2) Touchaku = [0, 3, 5, 6] (3) Kaishi = [0, 0, 0, 0] (4) Shuryou = [0, 0, 0, 0] (5) Shuryou[0] = taiken (6) i を 1 から 3 まで 1 ずつ増やしながら繰り返す: (7) | Kaishi[i] = 大きい方(【ア】) (8) ⎿ Shuryou[i] = Kaishi[i] + taiken

解答・解説を見る

正解: 1

正答

1

この問題のポイント

待ち行列シミュレーションの核心式 — 令和8年度本試験と同じ題材です。

解説

窓口が1つの行列を考えます。客iの対応が始められるのは、①自分が店に着いている(到着時刻 Touchaku[i] 以降)、②前の客の対応が終わっている(終了時刻 Shuryou[i-1] 以降)の両方が満たされた時刻、つまり2つのうち遅い方です。問題文の「遅い方」を関数に翻訳すると「大きい方(Touchaku[i], Shuryou[i-1])」——これが空欄の答えです。空欄の直後(8)で「終了=開始+対応時間」を計算していることからも、(7)が「開始時刻を決める行」だと逆算できます。

1ステップずつトレースします(taiken=4、客0は時刻0到着で 0開始→Shuryou[0]=4)。
i=1のとき: 大きい方(Touchaku[1], Shuryou[0]) = 大きい方(3, 4) = 4 → Kaishi[1]=4、Shuryou[1]=4+4=8。3分に来たが1分待った。
i=2のとき: 大きい方(5, 8) = 8 → Kaishi[2]=8、Shuryou[2]=12。3分待ち。
i=3のとき: 大きい方(6, 12) = 12 → Kaishi[3]=12、Shuryou[3]=16。6分待ち。
後の客ほど待ち時間が延びていく様子が数値で確認できます。

誤答は「誰の」「どの時刻か」の取り違えです。選択肢2の Kaishii-1では前の客がまだ対応中ですし、選択肢3の Shuryouiはこれから計算する値で参照できません。添字(i か i-1 か)と配列(到着・開始・終了)の組み合わせを、意味に戻して確かめるのが解法の型です。

令和8年度本試験のプログラムは、まさにこの「開始=大きい方(到着, 前の終了)」の式でした。この1行を自分の言葉で説明できれば、待ち行列型のシミュレーションは得点源にできます。

選択肢の確認

1.○ 自分の到着と前の客の終了の遅い方が開始時刻になる。
2.× 前の客の「開始」時点では前の客がまだ対応中。終了を待つ必要がある。
3.× Shuryou[i] は自分の終了で、(8)でこれから計算する値。参照できない。
4.× Kaishi[i] を自分の計算に使う循環参照で、値が決まらない。

ここだけは覚えよう

待ち行列は「開始=大きい方(自分の到着, 前の客の終了)」 — 添字の i と i-1 が誰を指すかを常に意味に戻して確認。

関連問題

CO-P29NW-C01