Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

파이썬으로 배열을 한 칸씩 순환 회전시키는 방법

사용자로부터 입력받은 배열이 주어졌을 때, 이 배열의 모든 요소를 시계 방향(오른쪽)으로 한 칸씩 순환 회전시키는 것이 목표입니다.

예시

입력: A=[1,2,3,4,5]
출력: [5,1,2,3,4]

위 예시에서 마지막 요소인 5가 배열의 맨 앞으로 이동하고, 나머지 요소들은 각각 한 칸씩 뒤로 밀려난 것을 확인할 수 있습니다.

알고리즘

1단계: 배열의 요소를 입력받는다.
2단계: 배열의 마지막 요소를 변수 x에 저장한다.
3단계: 나머지 모든 요소를 한 칸씩 뒤로 이동시킨다.
4단계: 배열의 첫 번째 요소를 x로 교체한다.

구현 코드

# 파이썬 프로그램: 배열을 한 칸씩 순환 회전

# 회전을 수행하는 함수
def rotate(A, n):
   x = A[n - 1]                # 마지막 요소 저장
   for i in range(n - 1, 0, -1):
      A[i] = A[i - 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=' ')

실행 결과

리스트의 크기를 입력하세요 ::5
리스트의 요소를 입력하세요 ::
8
7
90
67
56
원본 배열 ::>
8 7 90 67 56 
회전된 배열 ::
56 8 7 90 67 

동작 원리 설명

이 알고리즘의 핵심은 마지막 요소를 미리 저장해 두는 것입니다. 요소들을 뒤로 이동시키는 과정에서 마지막 값이 덮어써질 수 있기 때문입니다.

  1. 변수 x에 마지막 요소(56)를 저장합니다.
  2. range(n - 1, 0, -1)을 사용해 배열의 끝에서부터 시작 위치까지 역순으로 순회하며, 각 요소를 바로 앞 요소의 값으로 대체합니다.
  3. 루프가 끝나면 첫 번째 자리가 비게 되므로, 저장해 둔 xA[0]에 넣어 회전을 완성합니다.

시간 복잡도

배열의 모든 요소를 한 번씩 순회하므로 시간 복잡도는 O(n)이며, 추가 변수 하나만 사용하므로 공간 복잡도는 O(1)입니다.