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

Python으로 정사각형 행렬을 시계 반대 방향으로 90도 회전하는 방법

정사각형 행렬(square matrix)이 주어졌을 때, 이 행렬을 시계 반대 방향(counter-clockwise)으로 90도 회전해야 한다고 가정해 보겠습니다.

147
258
369

위 행렬을 회전하면 출력 결과는 다음과 같습니다.

789
456
123

문제 해결 접근 방법

이 문제는 다음과 같은 단계를 거쳐 해결할 수 있습니다.

  • 행렬이 비어 있다면 빈 리스트를 반환합니다.

  • n을 행렬의 행(row) 개수로 설정합니다.

  • 행렬의 각 행을 역순으로 뒤집습니다(reverse).

  • i를 0부터 n-1까지 순회하면서, j를 0부터 i-1까지 순회하며 matrix[i][j]와 matrix[j][i]의 값을 서로 교환합니다. 즉, 행렬의 전치(transpose)를 수행합니다.

  • 변환된 행렬을 반환합니다.

동작 원리

먼저 각 행을 뒤집으면 요소들의 좌우 순서가 바뀌고, 그 상태에서 전치 연산을 수행하면 시계 반대 방향 90도 회전과 동일한 결과가 됩니다. 정리하면 '행 뒤집기 + 전치' = 반시계 방향 90도 회전입니다.

예제 코드 (Python)

class Solution:
    def solve(self, matrix):
        if not matrix or not matrix[0]:
            return []
        n = len(matrix)
        for row in matrix:
            row.reverse()
        for i in range(n):
            for j in range(i):
                matrix[i][j], matrix[j][i] = matrix[j][i], matrix[i][j]
        return matrix

ob = Solution()
matrix = [
[1, 4, 7],
[2, 5, 8],
[3, 6, 9]
]
print(ob.solve(matrix))

입력

[
[1, 4, 7],
[2, 5, 8],
[3, 6, 9] ]

출력

[
[7, 8, 9],
[4, 5, 6],
[1, 2, 3]]

복잡도 분석

행렬의 모든 요소를 한 번씩 처리하므로 시간 복잡도는 O(n²)입니다. 또한 새로운 행렬을 생성하지 않고 기존 행렬 내부에서 값을 교환하는 제자리(in-place) 연산이므로, 추가 공간 복잡도는 O(1)입니다.