새소식

Computer Science/외우면 좋은 로직

1차원 배열 회전

  • -

알고리즘 문제를 풀면서 2차원 배열 회전이나 1차원 배열 회전을 참 많이 필요한데 미리 공식화하자. 

 

관련 문제 보러 가기: [프로그래머스] 배열 회전시키기

 

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))

 

 

관련 문제 보러 가기: [프로그래머스] 배열 회전시키기

 

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.