まず結論

科目Bの擬似コードには最大値・合計・カウント・探索・ソート・再帰という頻出パターンがあります。これらのパターンを「型」として身につけることで、初見の問題も素早く理解できるようになります。

頻出パターンの「型」まとめ

最大値の型
max ← a[1]
i を 2〜n
  if a[i] > max
   max ← a[i]
初期化→比較→更新
合計の型
sum ← 0
i を 1〜n
  sum ← sum + a[i]
0で初期化が必須
カウントの型
cnt ← 0
i を 1〜n
  if 条件
   cnt ← cnt+1
条件成立で+1
再帰の型
手続き f(n)
  if n≦1: n を返す
  f(n-1)+f(n-2)を返す
基底条件が必須
スタック逆順の型
i を 1〜len
  push(s[i])
stack空でない間
  pop()を表示
LIFO→逆順出力
2次元配列の型
i を 1〜rows
  j を 1〜cols
   sum←sum+a[i][j]
外ループ=行、内=列

パターン1:最大値・最小値の取得

// 配列から最大値のインデックスを求める a ← {7, 2, 9, 4, 6} maxIdx1 i を 2 から 5 まで繰り返す もし a[i] > a[maxIdx] ならば maxIdxi もし終わり 繰り返し終わり maxIdx を返す // → 3(a[3]=9が最大)
最大値パターンの型:① 最初の要素で初期化 → ② ループで全て比較 → ③ より大きければ更新。最小値は「>」を「<」に変えるだけ。

パターン2:再帰処理(フィボナッチ数列)

// n番目のフィボナッチ数を返す再帰関数 手続き fib(n) もし n1 ならば n を返す // 基底条件:f(0)=0, f(1)=1 もし終わり fib(n-1) + fib(n-2) を返す 手続き終わり
呼び出し実行内容戻り値
fib(4)fib(3) + fib(2)を計算3
fib(3)fib(2) + fib(1)を計算2
fib(2)fib(1) + fib(0)を計算1
fib(1)基底条件:n≦11
fib(0)基底条件:n≦10
再帰の2大要素:① 基底条件(Base Case):無限に続かないようにする停止条件 → ② 再帰呼び出し:自分より小さい問題に分解して呼ぶ

パターン3:スタックを使った処理

// スタックを使って文字列を逆順にする s ← "HELLO" stack ← 空のスタック // 全文字をプッシュ i を 1 から s の長さ まで繰り返す push(stack, s[i]) 繰り返し終わり // 全文字をポップして表示 stack が空でない間, 繰り返す pop(stack) を表示する 繰り返し終わり // → OLLEH(逆順)
スタック(LIFO)の応用:「逆順」「括弧の対応チェック」「深さ優先探索」など。後から入れたものを最初に取り出す性質を活かした問題が出題される。

パターン4:2次元配列の処理

// 3×3行列の全要素の合計を求める a ← {{1,2,3},{4,5,6},{7,8,9}} goukei0 i を 1 から 3 まで繰り返す // 行 j を 1 から 3 まで繰り返す // 列 goukeigoukei + a[i][j] 繰り返し終わり 繰り返し終わり goukei を返す // → 45(1〜9の合計)
2次元配列の読み方:a[行][列]または a[i][j]の記法。i=行番号、j=列番号。2重ループで全要素をなめる。

🎯 パターン別頻出テーマ

⚠️ よくある間違い

✍️ 確認クイズ

Q1. 再帰関数で「基底条件(Base Case)」が必要な理由はどれか。
✅ 正解は②。基底条件は再帰の「出口」。これがないと再帰が終わらず無限に続いてしまいます。例:fib(n)でn≦1のとき直接nを返す → これが基底条件でこれ以上再帰しない。
Q2. スタックにA, B, Cの順でプッシュして、3回ポップした結果はどれか。
✅ 正解は②。スタックはLIFO(Last In First Out)。A→B→Cの順でプッシュすると取り出しはC→B→Aの逆順になります。
Q3. 最大値を求めるアルゴリズムで、最初の要素で変数maxを初期化する理由はどれか。
✅ 正解は②。max←0で初期化すると全要素が負の場合(例:{-5,-3,-1})、常にmax=0になって正しい最大値-1が求まらない。最初の要素a[1]で初期化すれば全要素が負でも正しく動作します。
Q4. 配列 a[1..5] = {3, 1, 4, 1, 5} の合計を求めるとき、合計変数 sum の正しい初期値はどれか。
✅ 正解は②。合計を求めるアルゴリズムでは sum ← 0 で初期化します(足し算の単位元が0のため)。ループで全要素を足した結果 3+1+4+1+5=14 が得られます。最大値を求めるときは最初の要素で初期化しますが、合計は必ず0で初期化します。
Q5. 配列の要素数を数える(カウント)アルゴリズムで、条件に合う要素のカウンタ変数 cnt の正しい初期値と更新方法はどれか。
✅ 正解は②。カウントアルゴリズムは cnt ← 0 で初期化し、条件に合う要素を見つけるたびに cnt ← cnt + 1(インクリメント)します。これは基本パターンで、合計も cnt の更新を cnt ← cnt + a[i] にするだけで合計アルゴリズムになります。

Sponsor Link