配列を1つずつ時計回りに循環回転させるPythonプログラム
ユーザーが入力した配列を受け取り、その要素全体を時計回りに1つずつ循環的に回転させるのが本記事の目的です。最後尾の要素が先頭に移動し、それ以外の要素はそれぞれ後ろへ1つずつシフトされます。
実行例
入力:A = [1, 2, 3, 4, 5] 出力:[5, 1, 2, 3, 4]
この例では、末尾の「5」が先頭に移動し、「1〜4」はそれぞれ1つ後ろへずれています。
アルゴリズムの手順
ステップ1:配列の要素を入力する。 ステップ2:配列の最後の要素を変数 x に保存する。 ステップ3:すべての要素を1つ後ろの位置へシフトする。 ステップ4:配列の先頭要素を x で置き換える。
ポイント
ループは末尾から先頭方向へ逆順に処理するのがポイントです。前から順にシフトしてしまうと、まだ使っていない要素を上書きしてしまい、正しい結果が得られません。
サンプルコード
# Pythonプログラム:配列を1つだけ循環回転させる
# 回転を行う関数
def rotate(A, n):
x = A[n - 1] # 最後の要素を保存
for i in range(n - 1, 0, -1):
A[i] = A[i - 1] # 要素を1つ後ろへシフト
A[0] = x # 先頭に元の最後の要素を代入
# メイン処理
A = list()
n = int(input("リストのサイズを入力してください ::"))
print("リストの要素を入力してください ::")
for i in range(int(n)):
k = int(input(""))
A.append(k)
print("元の配列 ::>")
for i in range(0, n):
print(A[i], end=' ')
rotate(A, n)
print("\n回転後の配列は")
for i in range(0, n):
print(A[i], end=' ')
実行結果
Enter the size of the List ::5 Enter the Element of List :: 8 7 90 67 56 The array is ::> 8 7 90 67 56 Rotated array is 56 8 7 90 67
コードの解説
rotate 関数では、まず A[n - 1](最後の要素)を変数 x に退避させます。次に range(n - 1, 0, -1) を使い、インデックス n-1 から 1 まで逆順にループしながら、各要素にその直前の要素を代入します。最後に A[0] = x で退避しておいた要素を先頭へ戻すことで、時計回りの循環回転が完成します。
計算量は要素数 n に対して O(n)、追加のメモリは変数1個分だけで済むため、非常に効率的な方法です。
-
Pythonで配列(リスト)の合計を求める方法をわかりやすく解説
この記事では、配列(リスト)の合計値を求めるという問題に対して、Pythonでの解決策とアプローチをわかりやすく解説します。 問題の定義 配列が入力として与えられたとき、その配列に含まれるすべての要素の合計を計算することを目標とします。 例えば、[1, 2, 3, 4, 5] という配列が与えられた場合、出力は 15 になります。 アプローチ1:ループを使った素朴な方法(総当たり法) 最も基本的な方法は、リストを先頭から順に走査し、各要素を合計用の変数に加算していくやり方です。手順は以下の通りです。 合計を格納する変数を 0 で初期化します。 for ループでリストの各要素を取り出し、順番に
-
Pythonで挿入ソート(Insertion Sort)を実装する方法:アルゴリズムとサンプルコードを徹底解説
この記事では、Python 3.x(およびそれ以前のバージョン)における挿入ソートの実装方法について詳しく解説します。挿入ソートは、トランプの手札を整理するイメージに近い、直感的で理解しやすいソートアルゴリズムです。挿入ソートのアルゴリズム挿入ソートは以下の手順で動作します。入力要素を順番に走査し、各反復ごとにソート済みの配列部分を少しずつ拡張していきます。現在注目している要素(キー)を、ソート済み部分の中で最も大きい値と比較します。キーがその値より大きければ、要素は元の位置のまま次の要素へ進みます。そうでなければ、ソート済み配列内の正しい位置を探し出し、そこへ移動させます。具体的には、ソート