メインコンテンツへスキップ
見出し画像

【基本情報】科目B・擬似言語 完全攻略|アルゴリズム問題の解き方を徹底解説

対象者|基礎は追えるが、探索・整列で止まる方へ

擬似言語・アルゴリズムの解く手順を、図解とトレース例で確認する単品教材です。有料部分は第25節以降。大量の新作問題集や、科目B全範囲の模試ではありません。代入や条件分岐から難しい方は無料の擬似言語入門、または全文無料の講座第39回から試せます。

練習する3つの到達点

① 主要変数・入力・出力を整理し、更新後の値でトレースする。
② 線形探索・二分探索で調べる位置と範囲の変化を記録する。
③ 整列やスタック・キューの途中状態を追い、間違えた操作を説明する。

追加の無料見本|書き換えた配列を、次の比較に使う

配列a={2, 5, 2, 7}。配列は1始まり、forの終点は含み、←は代入です。型宣言を省いた独自の学習用表記です。最後のcountと配列aを、解説を見る前に答えてください。

count ← 0
for (i を 2 から 4 まで 1 ずつ増やす)
  if (a[i] が a[i - 1] より大きい)
    count ← count + 1
    a[i] ← 0
  endif
endfor

解答:count=3、a={2, 0, 0, 0}。 i=2で5>2が真、count=1としてa[2]を0へ。i=3では2>0が真なのでcount=2、a[3]を0へ。i=4でも7>0が真でcount=3、a[4]を0へ更新します。

最初の配列だけを見て5>2、2>5、7>2と比較すると、count=2になってしまいます。位置だけでなく、比較時点の配列全体を記録することがポイントです。

解き直し:a[i]←0の行を削除すると、countはいくつ? 答えは2。配列を書き換えないので、2>5は偽になります。どの行の変更で結果が変わったかを説明してください。

購入後の使い方|1回20〜30分の練習例

まず1テーマを読み、例を紙で追い、解説を隠して再現します。探索なら第28節→第30〜34節、整列なら第36〜44節へ。迷ったら第76〜79節で原因を分け、翌日に最初にずれた行から解き直してください。時間は練習枠の目安で、修了時間ではありません。購入済み教材で使う無料7日間復習表も用意しています。

購入・重複確認

単品の買い切り記事です。価格は購入欄をご確認ください。購入に使ったnoteアカウントでログインし、このページの続きから読めます。同じ記事を購入済み、または加入中の特典で読める場合は買い直し不要。買い切り講座とは別商品ですが共通テーマがあるため、先に手持ちの教材で同じ弱点を復習できるか確認してください。教材選び・重複確認ガイドも使えます。

この見本は独自の追加問題です。科目B全範囲の網羅や得点・合格を保証する教材ではありません。基礎をもう少し試すなら最大値の無料演習・配列交換の無料演習へ。この下に従来の無料解説が続きます。


「科目Aは覚えれば解けるけど、科目Bになると急に分からなくなる…」

「擬似言語を見るだけで難しそうに感じる…😇」

「i、j、data[i]、left、right、mid……何を追えばいいの?」

基本情報技術者試験の勉強で、こう感じている人はかなり多いと思います。

特に科目Bでは、

プログラムを“読む力”

が重要になります。

しかし、最初からプログラム全体を理解しようとする必要はありません。

科目Bのアルゴリズム問題は、

変数の意味を確認する
→ 条件を見る
→ 1行ずつ実行する
→ 値の変化を書き出す

という手順で整理すると、一気に読みやすくなります。

この記事では、擬似言語が苦手な人でも順番に理解できるように、

基礎 → トレース → 頻出アルゴリズム → 実戦的な解き方

まで徹底的に解説します。

さらに最後には、

科目Bの問題を解くための「攻略手順」

もまとめています。

科目Bで迷ったときに何度も戻ってこられる、攻略ロードマップとして使ってください🔥

⸻

1.科目Bで重要なのは「暗記」だけではない

科目Aでは、

「この用語の意味は?」

「この技術の特徴は?」

といった知識問題も多くあります。

一方、科目Bのアルゴリズムでは、

x ← 2
y ← 3
x ← x + y
y ← x × 2

のような処理を読み、

最終的に変数がどうなるか

を追う必要があります。

つまり重要なのは、

知っているか

だけではなく、

処理を順番に追えるか

です。

ここを最初に意識しておきましょう。

⸻

2.擬似言語とは?

擬似言語とは、

アルゴリズムを表現するための、プログラミング言語に似た記述方法

です。

例えば、

x ← 10

なら、

xに10を代入する

という意味です。

if x > 5

なら、

xが5より大きい場合

という条件を表します。

本物のプログラミング言語を完璧に覚えることが目的ではありません。

大切なのは、

その行で何が起こっているのか

を理解することです。

⸻

3.まず「←」を理解する

擬似言語を読むうえで最初に覚えたいのが、

←

です。

これは、

右側の計算結果を左側へ代入する

という意味です。

例えば、

x ← 10

なら、

x = 10

という状態になります。

⸻

4.代入は「等しい」とは違う

例えば、

x ← x + 1

という処理があります。

数学の式として、

x = x + 1

と考えるとおかしいですよね。

しかしこれは、

現在のxに1を足した結果を、新しいxとして保存する

という意味です。

xが5なら、

x ← x + 1

を実行すると、

x = 6

になります。

科目Bでは頻繁に登場します。

⸻

5.変数は「値を入れる箱」

変数は、

値を一時的に保存する箱

と考えると分かりやすいです。

例えば、

x ← 10

なら、

画像

というイメージ。

その後、

x ← 20

を実行すると、

画像

になります。

つまり、

古い値から新しい値へ更新される

ということです。

⸻

6.複数の変数をトレースする

次の処理を見てみましょう。

x ← 2
y ← 3
x ← x + y
y ← x × 2

順番に追います。

画像

最終的に、

x = 5
y = 10

です。

ここで非常に重要なのが、

処理は上から順番に実行される

ということ。

最後の、

y ← x × 2

で使われるxは、

最初の2ではありません。

すでに、

x = 5

へ更新されています。

⸻

7.科目Bでは「現在の値」を使う

ここはかなり重要です。

例えば、

x ← 3
x ← x + 2
x ← x × 2

なら、

最初に、

x = 3

次に、

x = 5

最後に、

x = 10

です。

常に、

その時点の最新の値

を使います。

⸻

8.比較演算子を整理する

条件分岐では、比較演算子が登場します。

画像

例えば、

x > 10

なら、

xが10より大きいか

を確認します。

⸻

9.if文を理解する

ifは、

条件分岐

です。

例えば、

if x > 10
   y ← 1
else
   y ← 0
endif

なら、

xが10より大きい場合、

y = 1

それ以外なら、

y = 0

です。

ポイントは、

条件が真か偽か

を判断することです。

⸻

10.条件式は必ず自分で○×判定する

例えば、

x = 8

のとき、

x > 5

は、

8 > 5

なので、

○

です。

一方、

x < 3

なら、

8 < 3

なので、

×

です。

頭の中だけで処理せず、

8 > 5 → ○

のように書き出すとミスを減らせます。

⸻

11.for文を理解する

forは、

決められた回数だけ処理を繰り返す

ときに使います。

例えば、

x ← 0
for i = 1 to 5
   x ← x + i
endfor

を考えます。

トレースすると、

画像

最終的に、

x = 15

です。

⸻

12.for文は「表」を作る

科目Bでfor文が出てきたら、

頭の中で追うより、

トレース表を作る

のがおすすめです。

例えば、

sum ← 0
for i = 1 to 4
   sum ← sum + i
endfor

なら、

画像

となります。

iが変わるたびに、他の変数がどう変わるか

を記録しましょう。

⸻

13.while文を理解する

whileは、

条件が成立している間、処理を繰り返す

構造です。

例えば、

x ← 1
while x < 10
   x ← x × 2
endwhile

なら、

1
↓
2
↓
4
↓
8
↓
16

となります。

16になると、

16 < 10

は偽なので終了です。

⸻

14.forとwhileの違い

ざっくり整理すると、

for
→ 回数が分かりやすい繰返し

while
→ 条件が成立している間の繰返し

と考えると理解しやすいです。

ただし問題では、名称よりも、

いつ繰返しが終了するのか

を見ることが重要です。

⸻

15.配列を理解する

配列は、

複数のデータをまとめて管理する仕組み

です。

例えば、

data = [10, 20, 30, 40]

なら、

画像

というイメージです。

⸻

16.data[i]の意味

例えば、

data = [10,20,30,40]

なら、

data[0] = 10
data[1] = 20
data[2] = 30
data[3] = 40

です。

つまり、

data[i]

は、

添字iに入っている値

を表します。

⸻

17.「添字」と「値」を混同しない

これは科目Bで非常によくあるミスです。

例えば、

画像

で、

i = 2

なら、

data[i] = 30

です。

iは位置

data[i]はその位置の値


です。

ここを明確に分けましょう。

⸻

18.配列+ループをトレースする

例えば、

data = [3,5,2,8]
sum ← 0
for i = 0 to 3
   sum ← sum + data[i]
endfor

を考えます。

画像

答えは、

18

です。

このタイプは、

i → data[i] → sum

の順番で追うと整理しやすくなります。

⸻

19.二重ループを理解する

科目Bで難易度が一段上がるのが、

二重ループ

です。

例えば、

for i = 1 to 3
   for j = 1 to 2
       処理
   endfor
endfor

なら、

i = 1
├ j = 1
└ j = 2
i = 2
├ j = 1
└ j = 2
i = 3
├ j = 1
└ j = 2

となります。

つまり処理回数は、

3 × 2 = 6回

です。

⸻

20.二重ループは「iを固定してjを動かす」

二重ループを追うコツは、

外側の変数を固定する

ことです。

例えば、

i = 1

の間に、

j = 1
j = 2
j = 3

と動く。

それが終わったら、

i = 2

になります。

いきなり全体を見ず、

i=○のとき

と区切って考えましょう。

⸻

21.関数を理解する

関数は、

複数の処理をひとまとまりにしたもの

です。

例えば、

function add(a, b)
   return a + b
endfunction

なら、

add(3,5)

を実行すると、

8

が返ります。

⸻

22.引数と戻り値

関数では、

引数

と、

戻り値

を区別しましょう。

add(3,5)

なら、

3
5

が引数。

そして、

8

が戻り値です。

覚え方は、

引数 → 関数へ入れる

戻り値 → 関数から返ってくる


です。

⸻

23.科目B攻略の中心は「トレース」

ここからが特に重要です。

科目Bのアルゴリズム問題で苦戦する人ほど、

頭の中だけでコードを実行しようとする

傾向があります。

おすすめは、

紙の上でコンピュータになること

です。

例えば、

x ← 1
for i = 1 to 4
   x ← x + i
endfor

なら、

画像

と追います。

これが、

トレース

です。

⸻

24.トレース表に書くもの

全部の変数を書く必要はありません。

基本的には、

値が変化する変数

を書きます。

例えば、

i
j
sum
count
left
right
mid
min
key

などです。

配列が変化する問題なら、

data

の状態も書きます。

⸻

ここまでで、科目Bの擬似言語を読むために必要な基本ルールを整理しました。

ただし、科目Bで重要なのは「記号の意味を覚えること」ではなく、擬似言語を上から順番に追い、変数や配列がどう変化するかを正確に読み取ることです。

ここから先では、

  • トレース問題の具体的な解き方

  • 配列を使った問題

  • 線形探索/二分探索

  • バブル/選択/挿入ソート

  • スタック/キュー

  • 頻出変数 i・j・left・right・mid・min の読み方

  • 計算量 O(n)・O(log n)・O(n²)

  • 本番で迷わないための問題の解き方

を、

図解とトレース表を使って実戦形式で解説します。

「擬似言語は読めるけど、問題になると解けない」という方は、ここからの内容を重点的に使ってみてください🔥

⸻

あなたへのおすすめ