情報処理技術者試験解説チャンネル

応用情報技術者試験をはじめとする情報処理技術者試験の午後問題では、「過去10年分を確実に理解しているか」が合格ラインを左右するといわれています。当チャンネルでは、その10年分の午後問題を要点だけに絞り、約10分のコンパクトな解説としてまとめました。限られた時間でも効率よく学習を進められる構成です。

【動画解説】基本情報技術者試験 科目B サンプル問題 問3解説

www.youtube.com 本動画では、基本情報技術者試験 科目B サンプル問題 問3を題材に、配列を扱うプログラムの動作をどのように読み解き、戻り値を正確に求めるかについて詳しく解説します。問3は、引数として与えられた配列に対して、新しい配列を生成し、その要素を累積的に加算していく関数 makeNewArray の処理内容を理解した上で、特定の要素番号に対応する値を求める問題です。アルゴリズム自体は複雑ではありませんが、配列の要素番号が 1 から始まる点や、「直前の結果を使って次の値を計算する」という処理の流れを正確に追えないと、途中で値を取り違えてしまいやすい構造になっています。 この関数 makeNewArray は、入力配列 in をもとに出力配列 out を作成しますが、一般的な累積和とは少し異なる点が特徴です。通常の累積和では、入力配列の先頭から順に値を足し合わせていきますが、この関数では「すでに作られた出力配列の末尾の値」に、次の入力要素を加算し、その結果を新たな末尾要素として追加していきます。つまり、毎回参照されるのは入力配列そのものではなく、「直前までの計算結果」である点が重要です。この違いに気付けるかどうかが、問3を正しく解くための最初の分岐点になります。 動画ではまず、関数の初期化処理に注目します。out は空の配列として用意され、最初に入力配列 in の先頭要素がそのまま out に追加されます。この時点で、out の要素数は 1 となり、その値が以降の計算の基準になります。ここで「最初の 1 要素は計算せず、そのままコピーする」という仕様を見落とすと、すべての後続計算がずれてしまうため、非常に重要なポイントです。 その後、ループ処理に入ります。ループ変数 i は 2 から始まり、入力配列 in の要素数まで順に増えていきます。各ループでは、まず現在の out の末尾要素、つまり直前に追加された値を取得し、それに in[i] の値を加算します。その計算結果が、新しい末尾要素として out に追加されます。この処理が繰り返されることで、out の各要素は「それまでに生成された out の値」と「現在参照している in の値」の合計として決まっていきます。したがって、ループの途中で out の値を一度でも取り違えると、その後のすべての結果に影響が及びます。 サンプル問題で与えられている入力配列は {3, 2, 1, 6, 5, 4} です。最初に out には 3 が追加されます。次に、out の末尾である 3 に in[2] の値 2 を加算し、5 が追加されます。続いて、末尾の 5 に in[3] の値 1 を加算して 6 が追加されます。このように、毎回「直前の out の末尾」を基準にして計算が進むため、処理の流れを頭の中だけで追うのではなく、紙やメモに out の状態を書き出しながら確認することが有効です。動画内では、各ステップごとに out の配列がどのように変化していくのかを順番に示しながら説明しています。 この処理を最後まで追うと、戻り値となる配列 out は {3, 5, 6, 12, 17, 21} となります。問われているのは、この戻り値の配列における要素番号 5 の値です。配列の要素番号が 1 から始まる点に注意すると、5 番目の要素は 17 であることが分かります。したがって、正解は解答群の中の「カ」、値としては 17 になります。 本問で多くの受験者がつまずく原因は、「入力配列の累積和」と思い込んで処理を追ってしまうことや、配列の要素番号を 0 始まりと誤解してしまうことにあります。科目Bの問題では、このように一見すると単純な配列処理であっても、仕様の細かい前提条件が明示されており、それを正確に読み取れるかどうかが問われます。特に、疑似言語で記述された問題では、自分が普段使っているプログラミング言語の感覚をそのまま当てはめると、思わぬミスにつながることがあります。 この動画では、最終的な答えに至るまでの計算過程だけでなく、「なぜこのような追跡の仕方をする必要があるのか」「どこで間違えやすいのか」といった思考上のポイントもあわせて解説します。配列を扱うアルゴリズム問題では、処理内容を文章として理解するだけでなく、実際に値がどう動くかを具体的に追跡する力が不可欠です。これは、後続のより難易度の高い問題、例えば二重ループや条件分岐を含む配列処理問題を解く際にも、そのまま応用できる重要な基礎力となります。 基本情報技術者試験 科目Bでは、アルゴリズムやプログラムの問題が得点の大きな割合を占めており、このような配列処理問題を確実に解けるようになることが合格への近道になります。本動画を通じて、makeNewArray の処理を正しく理解するだけでなく、「配列の状態を一段ずつ追いかける考え方」を身につけてください。問3は、その練習問題として非常に良い題材であり、ここでつまずかずに処理を追えるようになることが、科目B全体の理解を一段引き上げることにつながります。