arr=[1,2,3,4,5]인 배열의 요소가 오른쪽으로 2번씩 움직이고 가장 끝 요소는 다시 앞으로 온다고 생각해보자.
즉, [4,5,1,2,3]이 된다.
이번에는 arr=[1,2,3,4,5]에서 7번 움직인다고 생각해보자. 그러면 역시 [4,5,1,2,3]이 된다.
시각적으로 나타내면 다음과 같이 표현할 수 있다.
그리고 이걸 표를 통해 보여주면 다음과 같다.
i가 다시 5,6,7,8,9가 되면 (i+k)%N은 다시 2,3,4,0,1이 된다
코드로 나타내자.
# 배열값 이동
'''
새 배열을 만들어 원 배열의 i 번째 인덱스의 값을 새 배열의 i+n 인덱스에 집어넣는다.
이때 i+n 이 배열의 길이를 넘길 수 있기 때문에 배열의 길이만큼 나머지 연산을 한다.
'''
def rotate(arr, k):
if not arr:
return arr
N=len(arr)
k=k%N
if k==0:
return arr
new_arr=[0]*N
for i in range(N):
new_arr[(i+k)%N]=arr[i]
return new_arr
arr=[1, 2, 3, 4, 5]
print(rotate(arr,2))
근데 파이썬의 경우 deque에서 rotate()라는 함수가 있다.
from collections import deque
def solution(numbers, direction, k):
num = deque(numbers)
if direction == 'right':
num.rotate(k)
else:
num.rotate(-k)
return list(num)
if __name__=="__main__":
numbers = [1,2,3,4]
direction = 'right'
k=2
print(solution(numbers, direction, k))