配列を左にずらす問題を初心者向けに解説!【基本情報技術者試験対策】

IT基礎
ハク
ハク

配列って、どこに何が動いてるのか分からなくなるんだよね……

レイ
レイ

今回は”左に1つずつずらす”処理を図で理解していきましょう


問題

次の配列があります。(配列の要素は1から始まります。)

{1, 2, 3, 4, 5}

これを、

{2, 3, 4, 5, 1}

に変更したい問題です。

つまり、

  • 全体を左に1つずらす
  • 先頭の「1」を最後へ移動する

という処理ですね。


プログラム

整数型の配列:array ← {1, 2, 3, 4, 5}
整数型:i, tmp

tmp ← array[1]

for(i を 1 から a まで 1ずつ増やす)
b
endfor

array[arrayの要素数] ← tmp

この ab に何が入るかを考えます。


まずは最初の1行を見る

tmp ← array[1]
ハク
ハク

なんで最初に保存してるの?

レイ
レイ

左にずらすと、先頭の値が消えてしまうからです。

今の配列は:

1 2 3 4 5

このままずらすと「1」が消えてしまいます。

だから先に tmp に保存しておくんですね。

tmp = 1

左にずらすってどういうこと?

実際に動かしてみましょう!

現在:

1 2 3 4 5

こうしたい:

2 3 4 5 ?

つまり、

array[1] ← array[2]
array[2] ← array[3]
array[3] ← array[4]
array[4] ← array[5]

という動きをしています。


b に入る内容

レイ
レイ

左シフトでは、“右の値を左へコピー”します。

つまり:

array[i] ← array[i + 1]

これが b に入ります。


a はどこまで?

ハク
ハク

最後までやっちゃダメなの?

もし i = 5 まで行くと、

array[5] ← array[6]

になります。

でも array[6] は存在しません!

だから、

arrayの要素数 - 1

までにします。


正解

  • a → (arrayの要素数 – 1)
  • b → array[i] ← array[i + 1]

実際の動き

初期状態

1 2 3 4 5

tmp に 1 を保存。


i = 1

array[1] ← array[2]

2 2 3 4 5

i = 2

array[2] ← array[3]

2 3 3 4 5

i = 3

2 3 4 4 5

i = 4

2 3 4 5 5

最後に tmp を入れる

array[5] ← tmp

2 3 4 5 1

完成!


ハク
ハク

左右どっちか分からなくなるんだよね……

レイ
レイ

そんな時は、“どこへコピーするか”を見るんです。


左シフト

array[i] ← array[i+1]

右の値を左へ持ってくる。


右シフト

array[i+1] ← array[i]

左の値を右へ持っていく。


まとめ

ハク
ハク

今回のポイント!

  • 最初の値は tmp に保存する
  • 左シフトは array[i] ← array[i+1]
  • 配列外アクセスを防ぐため「要素数 – 1」まで
ハク
ハク

図で追うとかなり分かりやすいね!

レイ
レイ

配列問題は“実際に動かす”のが最強です。

コメント

タイトルとURLをコピーしました