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

基本情報技術者試験スタック・キュー」の問題

アルゴリズムとプログラミングアルゴリズムとプログラミング計算問題難易度:hard
次の擬似言語は、スタックを用いて文字列中の丸括弧の対応が正しいかを調べ、正しければ "OK"、誤っていれば "NG" を返す手続である。push は積む、pop は取り出す、isEmpty はスタックが空なら真を返す。s = {'(','(',')','(',')',')'}(要素数 6、添字は 1 から)を与えて実行したとき、戻り値はどれか。
○文字列型: checkParen(文字型の配列: s)
  整数型: i
  for (i を 1 から sの要素数 まで 1 ずつ増やす)
    if (s[i] が '(' と等しい)
      push('(')
    elseif (s[i] が ')' と等しい)
      if (isEmpty())
        return "NG"
      endif
      pop()
    endif
  endfor
  if (isEmpty())
    return "OK"
  endif
  return "NG"
"OK"
異常終了する
"N"
判定不能
正解
"OK"

'(' で push、')' で pop する。各 ')' の直前にスタックは空でなく途中で "NG" を返さず、走査後にスタックが空になるため最後に "OK" を返す。よって アが正しい。

?選択肢ごとの解説

ア ○'(' で push、')' で pop する。各 ')' の直前にスタックは空でなく途中で "NG" を返さず、走査後にスタックが空になるため最後に "OK" を返す。よって アが正しい。
イ ×配列外参照などで異常終了すると誤認した結果だが、本入力では添字が範囲内に収まり正常に "OK" を返す。
ウ ×"N" を返す経路は存在せず、戻り値が "OK"/"NG" の 2 値であることを取り違えた誤りである。
エ ×途中で isEmpty() が真になり判定できないと誤認した結果だが、本入力では対応が完全に取れ "OK" が確定する。

くわしく

括弧対応チェックは開きで push、閉じで pop し『閉じる時に空でないか』『最後に空か』の二条件で判定する。スタックの増減を 1 文字ずつ追うことが要点である。

本番での押さえどころ

試験のコツ

スタックの要素数を 1 文字ごとにメモし、0 を下回らず最後に 0 へ戻るかを確認する。

覚え方

『開いたら積む、閉じたら下ろす、最後に空なら OK』と唱える。

よくある誤り

閉じ括弧で空かどうかの確認を忘れたり、最後の空判定を省いたりして判定を誤るミスがある。

アルゴリズムとプログラミングの他の問題

この問題を、AIの8-ways解説つきで。

基本情報技術者試験の演習を、一問ごとに「なぜ」まで。まずは無料で。

無料ではじめる →

ukamiru 過去問 · 基本情報技術者試験 · fe-b-algo-0028

【基本情報技術者試験】スタック・キューの問題 — 解答・解説|ukamiru 過去問