정사각형 행렬(square matrix)이 주어졌을 때, 이 행렬을 시계 반대 방향(counter-clockwise)으로 90도 회전해야 한다고 가정해 보겠습니다.
| 1 | 4 | 7 |
| 2 | 5 | 8 |
| 3 | 6 | 9 |
위 행렬을 회전하면 출력 결과는 다음과 같습니다.
| 7 | 8 | 9 |
| 4 | 5 | 6 |
| 1 | 2 | 3 |
문제 해결 접근 방법
이 문제는 다음과 같은 단계를 거쳐 해결할 수 있습니다.
행렬이 비어 있다면 빈 리스트를 반환합니다.
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)입니다.