FUNDAMENTAL INFORMATION TECHNOLOGY ENGINEER
基本情報技術者の問題解説:次のプログラムを実行したときの戻り値はどれか。 文字列型: …
問題
次のプログラムを実行したときの戻り値はどれか。
文字列型: s ← "AABBBCA"
整数型: i, current ← 1, best ← 1
for (i を 2 から sの文字数 まで 1 ずつ増やす)
if (sのi文字目 = sの(i - 1)文字目)
current ← current + 1
else
if (current > best)
best ← current
endif
current ← 1
endif
endfor
if (current > best)
best ← current
endif
return best- ア 2
- イ 3(正解)
- ウ 4
- エ 5
出典:オリジナル問題|参考範囲:試験要綱Ver.5.5 / FEシラバスVer.9.x 科目B範囲
正解と解説
正解:3
| 確認 | 値 |
|---|---|
| 連続区間 | AA, BBB, C, A |
| 最大長 | BBBの長さ3 |
| 最後のif | ループ後のcurrentもbestと比較する |
隣接文字が同じ間はcurrentを増やし、文字が変わったら直前の連続区間をbestに反映してcurrentを1へ戻します。文字の種類数ではなく、同じ文字が連続した最大長を返します。
アはAAだけを見た場合、ウ・エは文字数や別区間まで合算した場合に出やすい値です。最後の区間はelseに入らず終わることがあるので、ループ後のifも忘れず確認しましょう。
つまずきポイント:末尾の連続区間はelseを通らずループが終わるため、bestへ反映するのはループ後のifだけです。最長区間が末尾にある場合、例えば\"ABBB\"ではループ後にcurrentが3まで伸びており、この最後のif(3>1)がなければbestは1のままになります。1回の走査で済むためO(n)時間です。
この問題について
擬似言語記法、アルゴリズム読解・トレース・空欄補充・セキュリティ事例判断の傾向を参考にした独自問題です。本文・数値・選択肢は新規作成しています。
公式試験問題、公開問題、市販教材、外部問題サイトの問題文を転載・改題したものではありません。