アルゴリズムとプログラミング

基本情報技術者試験次の擬似言語は、文字列 s を左から走査し、スタック頂上と同じ文字が来たら頂上を pop…

アルゴリズムとプログラミングアルゴリズムとプログラミング計算問題難易度:hard
次の擬似言語は、文字列 s を左から走査し、スタック頂上と同じ文字が来たら頂上を pop して両者を消し、異なれば push する処理で、隣接した同一文字の対を繰り返し消去する。最後にスタックを底から順に並べた文字列を返す。s = "abbaca"(左から1文字ずつ)を与えて実行したとき、戻り値はどれか。push は積む、pop は取り出す、top は頂上参照、isEmpty は空判定を表す。
○文字列型: removeAdj(文字型の配列: s)
  スタック: stk          // 空で開始
  整数型: i
  for (i を 1 から sの要素数 まで 1 ずつ増やす)
    if (stk.isEmpty が false and stk.top が s[i] と等しい)
      stk.pop()
    else
      stk.push(s[i])
    endif
  endfor
  return スタックを底から順に連結した文字列
"abca"(相殺処理を行わない場合)
"abc"
"aca"
"ca"(連鎖消去後)
正解
エ."ca"(連鎖消去後)

頂上と同じ文字なら相殺する。abbaca を順に処理すると bb が消え、続いて露出した aa が連鎖的に消え、最後に c と a が残る。底から連結すると "ca" となるため エが正しい。

?選択肢ごとの解説

ア ×隣接同一文字の消去をまったく行わず元に近い "abca" とした、相殺処理を無視した誤りである。
イ ×末尾の a を落として "abc" とした、走査の最後の文字を処理し忘れた誤りである。
ウ ×bb を消した後に露出する aa の連鎖消去を見落とし a を 1 つ残して "aca" とした、連鎖を 1 回で止めた誤りである。
エ ○頂上と同じ文字なら相殺する。abbaca を順に処理すると bb が消え、続いて露出した aa が連鎖的に消え、最後に c と a が残る。底から連結すると "ca" となるため エが正しい。
この問題の「深掘り・誤答の完全解説・覚え方」は、登録すると読めます。

基本情報技術者試験は全4,036問。公開しているのはその一部で、登録すると残りも一問ごとにAI解説つきで解けます。SRS暗記カード・全真模試・弱点診断まで。

登録は1分・クレジットカード不要。無料のまま練習・暗記カード・模試まで使えます。

作成・校閲:ukamiru編集部 · 基本情報技術者試験 過去問 · fe-b-algo-0106

【基本情報技術者試験】次の擬似言語は、文字列 s…|正解「"ca"(連鎖消去後)」|ukamiru 過去問