배열(리스트)의 요소를 왼쪽으로 회전시켜야 하는 경우가 종종 있습니다. 이를 구현하려면 배열을 반복 순회하면서, 지정된 회전 횟수만큼 각 요소의 인덱스를 한 칸씩 앞으로 이동시키면 됩니다.
왼쪽 회전이란 리스트의 첫 번째 요소가 마지막 위치로 이동하고, 나머지 요소들이 한 칸씩 앞당겨지는 연산입니다. 예를 들어 [11, 12, 23]을 1회 왼쪽 회전하면 [12, 23, 11]이 됩니다.
예제 코드
my_list = [11, 12, 23, 34, 65]
n = 3
print("원본 리스트 : ")
for i in range(0, len(my_list)):
print(my_list[i])
for i in range(0, n):
first_elem = my_list[0]
for j in range(0, len(my_list)-1):
my_list[j] = my_list[j+1]
my_list[len(my_list)-1] = first_elem
print()
print("왼쪽 회전 후 리스트 : ")
for i in range(0, len(my_list)):
print(my_list[i])실행 결과
원본 리스트 : 11 12 23 34 65 왼쪽 회전 후 리스트 : 34 65 11 12 23
코드 설명
먼저 리스트를 정의하고, 콘솔에 출력하여 원본 상태를 확인합니다.
왼쪽으로 회전시킬 횟수(n)를 정의합니다. 위 예제에서는 3회 회전합니다.
외부 반복문이 회전 횟수만큼 실행되고, 내부 반복문은 리스트 전체를 순회하며 각 요소를 바로 앞 인덱스로 이동시킵니다. 즉, 현재 인덱스의 값에 다음 인덱스의 값을 할당합니다.
내부 반복문이 끝나면 첫 번째 요소(인덱스 0)를 미리 저장해 둔 값을 마지막 인덱스에 할당합니다. 이렇게 하면 한 번의 왼쪽 회전이 완성됩니다.
위 과정을 n번 반복한 뒤, 최종 결과를 콘솔에 출력합니다.
더 간단한 방법: 슬라이싱 활용
파이썬에서는 슬라이싱(slicing)을 사용하면 훨씬 간결하게 왼쪽 회전을 구현할 수 있습니다.
def left_rotate(arr, n):
n = n % len(arr) # 회전 횟수가 리스트 길이보다 클 경우 처리
return arr[n:] + arr[:n]
my_list = [11, 12, 23, 34, 65]
print(left_rotate(my_list, 3))
# 출력: [34, 65, 11, 12, 23]이 방법은 arr[n:](n번째부터 끝까지)와 arr[:n](처음부터 n번째 전까지)를 연결하여 새로운 리스트를 생성합니다. 또한 나머지 연산자(%)를 사용해 회전 횟수가 리스트 길이보다 커도 올바르게 동작하도록 처리했습니다.
반복문 방식은 알고리즘 학습에 유용하고, 슬라이싱 방식은 실무에서 코드를 더 짧고 가독성 있게 작성할 때 적합합니다. 상황에 맞게 선택하여 사용하시기 바랍니다.