본문 바로가기
알고리즘 설명

2차원 배열 회전하기

by 다빈치코딩 2024. 1. 24.

목차

    반응형

    배열의 회전 이해하기

    알고리즘 문제를 풀다보면 배열을 회전시켜야 하는 경우가 있습니다. 이런 경우 어떻게 해야 하는지 당황하는 친구들을 위해 배열을 회전하는 방법에 대해 알아보겠습니다.

    위 그림과 같이 1부터 9까지의 3 X 3 배열을 시계방향으로 90도 회전을 하면 오른쪽 그림처럼 됩니다. 회전을 눈으로 보면 쉽지만 이것을 직접 배열로 바꾸면 값을 어떻게 바꿔주어야 할지 막막합니다. 이것을 행과 열의 위치로 표현해 보겠습니다. 앞의 수는 i열을 뜻하는 열의 수, 두 번째 수는 j행을 뜻하는 행의 수 입니다.

    0, 0 에 있는 수를 0 0 으로 표현한 것입니다. 0번째 행을 확인해보면 각 열의 값이 행의 값으로 바뀌어 있음을 알 수 있습니다. 1행, 2행을 봐도 똑같이 열의 값이 행의 값으로 바뀌어 있습니다.

    다음으로 열의 값이 어떻게 바뀌었나 확인해 보겠습니다.

    0, 1, 2 순으로 되어 있던 열의 값이 2, 1, 0순의 행으로 바뀌었습니다. 즉 열의 순서가 행으로 바뀌면서 거꾸로 되어 있다는 것을 알 수 있습니다. 거꾸로 된 수로 나타내기 위해서는 이 배열의 크기를 알기 때문에 배열의 크기에서 열의 값을 빼면 됩니다.

    코드 확인

    그럼 코드로 확인해 보겠습니다.

    초기화

    N = 3
    a = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
    b = [[0] * N for _ in range(N)]
    

    두 배열을 만들었습니다. a라는 배열에는 1부터 9까지 들어 있습니다. 다음으로 b는 0으로 되어 있는 3 X 3의 배열입니다. 이 a라는 배열을 시계방향으로 90도 돌리는 코드를 작성해 보겠습니다.

    for i in range(N):
        for j in range(N):
            b[j][N - 1 - i] = a[i][j]

    a의 행의 값 i는 b의 열의 값이 되었습니다. 다음으로 a의 열의 값은 거꾸로 나타내야 하기 때문에 N - 1 에서 j의 값을 빼주었습니다. N이 아닌 N - 1 에서 빼야하는 것에 주의해야 합니다.

    확인하기

    for i in range(N):
        print(*a[i],'   ', *b[i])
    

    이렇게 두 배열의 값이 어떻게 되었나 확인해 보면 아래와 같은 결과를 얻을 수 있습니다.

    1 2 3     7 4 1
    4 5 6     8 5 2
    7 8 9     9 6 3
    

    두 값이 어떻게 변하는지 안다면 시계방향 뿐만 아니라 반시계방향, 대칭등 다양한 방법으로 응용하여 값을 구할 수 있습니다.

     

    반응형