基本情報 科目Bの攻略 — 知識ではなく「慣れ」で突破する

結論

科目Bは20問100分。繰り返し処理と分岐処理を覚える。過去問を解いた回数がそのまま点数の向上につながる。問題文が分からなくても、擬似言語に実際の値を入れて動かすことが重要。

結論:科目Bは知識の試験ではない。過去問を解いた回数がそのまま点数の向上につながる

科目Bで覚えることは、驚くほど少ないです。繰り返し処理と分岐処理の読み方が分かれば、あとは過去問を解いた回数が点数につながります。

知識というより技術に近い、という言い方がいちばん近いと思います。自転車の乗り方を本で読んでも乗れるようにならないのと同じで、擬似言語は読んで理解するものではなく、手を動かして慣れるものです。

私は2026年6月の試験で科目B 585点を取って落ちました。合格ラインは600点なので15点差です。44日後の再受験で660点まで上げましたが、そのあいだに新しく覚えた知識はほとんどありません。初見の問題を解いた回数を増やしただけです。

この記事では、その「慣れる」を具体的に何をすることなのかまで分解して書きます。

まず数字を押さえる

対策を考える前に、科目Bの試験方法について確認します。IPAの試験要綱に書かれている数字です。

科目A科目B
試験時間90分100分
出題数・解答数60問・60問20問・20問
選択方法全問必須全問必須
出題形式多肢選択式(四肢択一)多肢選択式
配点1,000点満点1,000点満点
合格基準600点以上600点以上

ここから持ち帰ってほしい数字は2つです。

① 1問あたり5分。 100分 ÷ 20問です。実際には見直しの時間も要るので、5分は上限であって目安ではありません。

② 20問のうち16問がアルゴリズムとプログラミング。

科目B 20問アルゴリズムとプログラミング 16問情報セキュリティ 4問
20問のうち16問がアルゴリズム。採点はIRTなので配点がそのまま8割というわけではありませんが、解く時間の大半はこちらに向きます。

試験要綱には、こう書かれています。

分野別の出題数は,アルゴリズムとプログラミング分野 16 問,情報セキュリティ分野 4 問とする。

情報セキュリティの4問は、科目Aの知識でそのまま解けます。 暗号方式、認証、マルウェア対策といった内容で、擬似言語は出てきません。つまり科目B対策として身構える必要があるのは、実質アルゴリズムとプログラミングの16問だけということになります。

細かいが効く話:科目Bは四肢択一ではない

表をもう一度見てください。科目Aだけ「四肢択一」と書かれていて、科目Bは「多肢選択式」としか書かれていません。

実際、公開されている科目Bの問題には、選択肢が5つのものも、8つのものもあります。消去法が効きにくいということです。4択なら当てずっぽうで25%ですが、8択なら12.5%。自信のない問題を勘で埋める戦術は、科目Bでは科目Aほど報われません。

繰り返し処理と分岐処理を覚えることが重要

擬似言語の記法は、覚えようとすると量があるように見えます。実際に要るのは次の5つです。

記法意味
x ← 1代入。右を左に入れる
if ~ endif分岐。成り立てば中を実行
for ~ endfor繰り返し。回数が決まっているとき
while ~ endwhile繰り返し。条件が続くあいだ
data[1]配列。添字は1から

この5つで、科目Bの大半の問題は読めます。代入が = ではなく左向きの矢印である点だけ、最初は目が慣れません。

配列の添字が1から始まる点だけは、意識して覚えてください。 プログラミングの経験がある人ほど0から数えてしまい、1つずれた答えを選びます。経験が邪魔をする数少ない場所です。

再帰は後回しでいい

繰り返しと分岐は毎回出ますが、再帰が出る頻度はそれより落ちます。優先順位をつけるなら、再帰は繰り返しと分岐が完全に読めるようになってからで間に合います。

再帰に専用の記法はありません。 関数が自分を呼ぶだけです。前の表の5つ以外に、新しく覚えることは出てきません。

○整数型: g(整数型: n)
  if (n ≦ 1)
    return 1
  endif
  return n × g(n − 1)

g(4) を追いかけると、こうなります。

g(4) → 4 × g(3)
      g(3) → 3 × g(2)
            g(2) → 2 × g(1)
                  g(1) → 1        ← ここで止まる

止まったところから、順に戻ります。2 × 1 は 2、3 × 2 は 6、4 × 6 で 24。これが g(4) の答えです。

見るところは2つです。自分を呼んでいる行と、呼ぶのをやめる行。やめる行がないと永遠に止まらないので、再帰のプログラムには必ずあります。そこを先に見つけると、追いかける範囲が決まります。

ただし頭の中だけで処理しようとすると確実に迷うので、後述するトレースを必ず紙の上でやってください。

問題文が分からなくても、値を入れれば答えは出る

ここがこの記事でいちばん伝えたいところです。

科目Bの問題文は、読んだだけでは何をしたいのか分からないことがよくあります。そこで止まってしまう人が多いのですが、分からなくていいです。とりあえず具体的な値を入れて、1行ずつ動かしてみてください。

実際にやってみる

たとえば、こういう問題が出てきたとします。

問 次のプログラムは、関数 f の定義である。引数 data は整数型の配列であり、その要素はいずれも 0 又は 1 である。f({1, 0, 1, 1}) の戻り値はどれか。

解答群 ア 4 / イ 7 / ウ 11 / エ 13

○整数型: f(整数型の配列: data)
  整数型: i
  整数型: kekka ← 0
  for (i を 1 から dataの要素数 まで 1 ずつ増やす)
    kekka ← kekka × 2
    if (data[i] が 1 と等しい)
      kekka ← kekka + 1
    endif
  endfor
  return kekka

問題文を読んでも、この関数が何をするものなのかは書かれていません。 「0か1が並んだ配列を渡すと、整数が返ってくる」としか分かりません。プログラムを読んでも、2倍して、1なら1を足すのが何なのかは見えてきません。

ここで「何のプログラムなのか」を考え込むと、止まります。考えるのをやめて、聞かれている {1, 0, 1, 1} をそのまま入れてください。 1周ごとに結果がどうなるかを、書き出していくだけです。

ikekka(前)data[i]計算kekka(後)
1010 × 2 + 11
2101 × 22
3212 × 2 + 15
4515 × 2 + 111

戻り値は 11。答えは ウ です。

ここでは見やすいように表の形にしましたが、本番でこの形に清書する必要はありません。 私は表を書いていません。配列の中身と、変わっていく変数の値が紙に残っていれば十分です。

ここまでで、この関数が何をするものなのかは一度も考えていません。 それでも正解は出ました。問題が聞いているのは「何をするプログラムか」ではなく「戻り値はどれか」なので、動かせば答えが出ます。

順番が逆でいい

ふつう勉強は「理解してから解く」ものだと思いがちですが、科目Bは逆で構いません。

理解は、解くための前提ではありません。 分からないまま正解して、先に進んでいいです。試験が測っているのは、プログラムの意図を言い当てる力ではなく、書いてあるとおりに動かせるかだからです。

なお、この関数は2進数を10進数に直すものでした。入れた {1, 0, 1, 1} は 1011、出てきた数は 11 です。

1011(2) = 8 + 0 + 2 + 1 = 11

ただし、これに気づけたから解けたわけではありません。 気づいたのは答えが出たあとですし、気づかないままでも ウ は選べています。

紙に書く手間を惜しまない

「頭の中だけでできる」と思ったときが、いちばん間違えます。

変数などは記憶に頼らずに、できるだけ紙に書いてしまったほうがいいです。1つでも記憶違いをすると、まったく違う答えになってしまいます。

過去問をとにかく解く。同じパターンが繰り返される

ここから先は、量の話になります。

科目Bの問題は、まったく同じ問題は出ませんが、形が繰り返されます。代表的なものを挙げます。

一度このパターンに出会っておくと、次に似た形を見たときの読む速度が変わります。 初見で5分かかったものが、2回目は1分で見当がつきます。これが「慣れる」の正体です。

同じ問題集を繰り返すだけでは足りない

私が1回目に落ちた原因がここでした。過去問サイトで正答率80%を維持していたのですが、同じ顔ぶれの問題を繰り返していただけで、測っていたのは実力ではなく記憶でした。

初見の問題を解いた数が効きます。手持ちの問題を解き終えたら、教材を1冊足してください。正答率が落ちるはずですが、それが本当の実力です。

分からないところは調べる、で十分

解説を読んでも分からないときは調べる。それを繰り返していれば、合格に必要な力は後からついてきます。先に知識を完璧にしてから問題に入る、という順番にしないでください。 科目Bに限っては、それがいちばん遠回りになります。

有名なアルゴリズムは、深追いしない

ユークリッドの互除法のような有名なアルゴリズムを知っていると、「ああ、これをプログラムにしたいのか」と早い段階で見当がつきます。これは確かに有利です。

ただし、ここを広げすぎないでください。 有名アルゴリズムを一覧で覚えにかかると、覚えることに時間を使用してしまい、過去問に慣れるための時間が減ってしまいます。

知っておいて損はないくらいに思っておいてください。挙げるとすれば、この3つです。

目的は暗記ではなく、見たときに「あ、これか」と気づくことです。名前と、何をする手順かが一言で言えれば足ります。

時間配分は別に決めておく

1問5分という上限がある以上、解けない問題をどこで切り上げるかを先に決めておく必要があります。これは量の話ではなく運用の話なので、別の記事にまとめています。

→ 科目Bで時間切れしないための「2分ルール」

まとめ:結局、解いた回数がそのまま点につながる

やることを並べ直すと、これだけです。

  1. 繰り返しと分岐の読み方を押さえる(再帰は後回しでいい)
  2. 配列の添字は1から、だけは意識して覚える
  3. 分からなくても値を入れて動かす
  4. 初見の問題をひたすら解く。分からなければ調べる
  5. 有名アルゴリズムは深追いしない。知っていれば良い、くらいに留める

科目Bは、知らないから解けないのではなく、慣れていないから解けない試験です。覚える量を増やしても点は伸びません。

手を動かした回数が、そのまま点につながります。

用語を覚えたい方、進数に慣れていない方はこちらから確かめてください。

→ アルゴリズムとプログラミングのミニテスト(全10問) / 進数変換の練習問題

先に答えだけ知りたい人へ

基本情報技術者試験の科目Bは何問を何分で解きますか。

20問を100分で解きます。全問必須で、選ぶ問題はありません。単純計算で1問あたり5分です。

科目Bでは、アルゴリズムと情報セキュリティが何問ずつ出ますか。

IPAの試験要綱では、アルゴリズムとプログラミング分野が16問、情報セキュリティ分野が4問とされています。

科目Bを解くのに、プログラミング言語の知識は必要ですか。

特定の言語の知識は要りません。2023年4月以降の科目BはすべてIPA独自の擬似言語で出題され、C言語やJavaなどによる出題は廃止されています。

擬似言語の問題はどこで手に入りますか。

IPAの公式サイトに、科目Bのサンプル問題と公開問題が無料で掲載されています。擬似言語の記述形式の説明も同じく公開されています。

この記事に出てきた用語