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

파이썬(Python)으로 리스트를 n칸 오른쪽으로 회전시키는 프로그램

사용자가 입력한 리스트와 회전 횟수가 주어졌을 때, 지정된 횟수만큼 리스트를 오른쪽으로 회전시키는 것이 이번 글의 목표입니다. 오른쪽 회전이란 리스트의 뒤쪽 요소들이 앞쪽으로 이동하고, 나머지 요소들은 순서대로 뒤로 밀리는 연산을 의미합니다.

예제

입력 A = [2, 4, 5, 12, 90]
회전 횟수 = 3
출력 [90, 12, 2, 4, 5]

방법 1: 반복문으로 요소 재배치하기

첫 번째 방법은 리스트의 각 요소를 하나씩 순회하면서 새로운 리스트의 올바른 위치에 삽입하는 방식입니다. 먼저 뒤쪽 n개의 요소를 차례로 추가한 뒤, 앞쪽에 남은 요소들을 이어 붙여 완성합니다.

예제

def right_rotation(my_list, num): 
   output_list = []
   for item in range(len(my_list) - num, len(my_list)):
      output_list.append(my_list[item])
   for item in range(0, len(my_list) - num):
      output_list.append(my_list[item])
   return output_list

# 드라이버 코드
A = list()
n = int(input("리스트의 크기를 입력하세요: "))
print("숫자를 입력하세요")
for i in range(int(n)):
   p = int(input("n="))
   A.append(int(p))
   print(A)

rot_num = int(input("회전 횟수를 입력하세요: "))
print("회전 후:", right_rotation(A, rot_num))

실행 결과

리스트의 크기를 입력하세요: 6
숫자를 입력하세요
n= 11
[11]
n= 22
[11, 22]
n= 33
[11, 22, 33]
n= 44
[11, 22, 33, 44]
n= 55
[11, 22, 33, 44, 55]
n= 66
[11, 22, 33, 44, 55, 66]
회전 횟수를 입력하세요: 3
회전 후: [44, 55, 66, 11, 22, 33]

방법 2: len() 함수와 슬라이싱 활용하기

두 번째 방법은 len() 함수와 슬라이싱(slicing) 기법을 함께 사용합니다. 리스트 전체 길이에서 회전 횟수를 뺀 위치를 기준으로 리스트를 두 부분으로 나눈 다음, 두 부분의 순서를 바꿔 하나로 합치면 회전이 완료됩니다.

A = list()
ni = int(input("리스트의 크기를 입력하세요: "))
print("숫자를 입력하세요")
for i in range(int(ni)):
   p = int(input("ni="))
   A.append(int(p))
   print(A)

n = 3
A = (A[len(A) - n:len(A)] + A[0:len(A) - n])
print("회전 후:", A)

실행 결과

리스트의 크기를 입력하세요: 6
숫자를 입력하세요
ni= 11
[11]
ni= 22
[11, 22]
ni= 33
[11, 22, 33]
ni= 44
[11, 22, 33, 44]
ni= 55
[11, 22, 33, 44, 55]
ni= 66
[11, 22, 33, 44, 55, 66]
회전 후: [44, 55, 66, 11, 22, 33]

방법 3: 음수 인덱스 슬라이싱 활용하기

세 번째 방법은 파이썬의 음수 인덱스(negative indexing)를 활용하는 가장 간결한 방식입니다. A[-n:]은 리스트의 마지막 n개 요소를 추출하고, A[:-n]은 나머지 앞부분 요소를 추출합니다. 이 둘을 더하면 오른쪽 회전이 한 줄로 완성됩니다.

예제

A = list()
ni = int(input("리스트의 크기를 입력하세요: "))
print("숫자를 입력하세요")
for i in range(int(ni)):
   p = int(input("ni="))
   A.append(int(p))
   print(A)

n = 3
A = (A[-n:] + A[:-n])
print("회전 후:", A)

실행 결과

리스트의 크기를 입력하세요: 6
숫자를 입력하세요
ni= 11
[11]
ni= 22
[11, 22]
ni= 33
[11, 22, 33]
ni= 44
[11, 22, 33, 44]
ni= 55
[11, 22, 33, 44, 55]
ni= 66
[11, 22, 33, 44, 55, 66]
회전 후: [44, 55, 66, 11, 22, 33]

마무리

세 가지 방법 모두 동일한 결과를 출력하지만, 방법 3처럼 음수 인덱스 슬라이싱을 활용하면 코드가 가장 짧아지고 파이썬다운(Pythonic) 스타일로 널리 사용됩니다. 반면 방법 1은 회전 과정을 단계별로 명확하게 보여주기 때문에 알고리즘의 동작 원리를 학습할 때 유용합니다. 상황에 맞는 방법을 선택해 활용해 보세요.