基本情報 平成23年度 春期 問7:テクノロジ系に関する問題
要素番号が 0 から始まる配列 TANGO がある。ヵ 個の単語が TANGO 1] から TANGO [ヵ] に入っている。図は, ヵ 番目の単語を TANGO [1] に移動するために, TANGO [1] から TANGO [一1] の単語を順に一つずつ後ろにずらして単語表を再構成 する流れ図である。a に入れる処理として, 適切なものはどれか。
- a| TANGO [z] 一 TANGO [0] 1正答
- bの ループ ルーにおける条件は 7・タ一1. 一1 0 変数名 :・ 初期値, 増分, 終値 ェーー を示す。 I し ループ ノ ーー
- cTANGO[7] 一 TANGO[7二1 TANGO[] 一 TANGO[z一7] TANGO[7二1] つ TANGO[一7] TANGO[z一7] 一 TANGO[7]
- dhhざさへぺい
AI解説(初心者・標準・上級)
理解度に合わせて3レベルの解説を無料で読めます。
答えは a です。
配列の中の単語を「1つずつ後ろにずらして、最後の単語を先頭に持ってくる」処理。トランプの一番下のカードを一番上に持ってくるイメージ。最終的に最後の位置に元の先頭が来るような代入処理が aの選択肢になります。
👉 覚え方:ずらすときは「後ろから順に上書き」が基本。
ほかの選択肢:b はループ条件だけで処理がない/c は代入順がズレて元データが消える/d は判読不能。
なぜこれが正解か
正解は a。n番目の単語をTANGO[1]に移動し、TANGO[1]〜TANGO[n-1]を後ろに1つずつずらす操作(右シフト)を実現するには、TANGO[n]を一旦退避してから、後ろから順にTANGO[i]=TANGO[i-1]を実行する必要がある。aの「TANGO[n]→TANGO[0]に退避」がこの退避処理を含むためフロー全体が成立する。
各選択肢の解説
- b:ループ条件と説明のみで処理本体がない。
- c:代入順序が前→後ろになっており、元データが上書きされて消える。
- d:判読不能・記号化された選択肢。
覚え方・ひっかけ注意
配列の右シフトは後ろから埋めるのが鉄則。前から代入すると上書きで元データが失われる。退避用変数(または末尾要素)を使うのもポイント。流れ図問題はトレース表(変数の値の遷移表)を書いて確実に追う。
理論的背景
配列の循環シフト操作はO(n)時間。右シフト1段の場合、退避が1要素で済むが、k段右シフトはk要素退避が必要。効率化技法として3回反転法([0..k-1]を反転、[k..n-1]を反転、全体を反転)でO(n)時間・O(1)空間を達成できる(リーマン法とも呼ばれる)。配列を環状バッファで実装すると、論理的にはO(1)で先頭/末尾を変更できる(実体は移動せず、開始位置だけ更新)。
実務での使われ方
LRUキャッシュの実装、リングバッファ(音声バッファ・ネットワークソケットバッファ)、ローテーション暗号、画像処理の畳み込み演算など。リアルタイム性が要求されるオーディオ処理ではリングバッファが標準的に使われる。
試験での位置づけ
基本情報のアルゴリズム分野で頻出。配列操作・流れ図トレース問題は毎回複数問出題され、基本情報の核となる出題分野。応用情報ではアルゴリズムの計算量評価(O記法)、データ構造選択の最適性、不変条件(invariant)による正当性証明が問われる。
選択肢の発展補足
配列ベース実装ではO(n)時間・O(1)空間が標準。連結リストならO(1)でheadとtailを付け替えできるためシフト操作に強い。Pythonのcollections.dequeは両端キューとして実装され、O(1)で先頭末尾の追加削除が可能。流れ図問題のトレース技法(変数の値遷移表)は基本情報合格に直結するスキルで、繰り返し練習が必要。アルゴリズムの正当性を不変条件と帰納法で証明する習慣をつけると応用情報でも有利。
出典:IPA(情報処理推進機構)公式 基本情報技術者試験 平成23年度 春期 問7/ 公的機関配布資料につき出典明記の上引用。解説は合格ナビによる独自AI解説です。