문제 설명
하나의 이미지를 나타내는 2차원(2D) 행렬이 있다고 가정해 보겠습니다. 우리가 해야 할 작업은 이 이미지를 시계 방향으로 90도 회전하는 것입니다.
예를 들어, 다음과 같은 이미지가 있다면:
| 1 | 5 | 7 |
| 9 | 6 | 3 |
| 2 | 1 | 3 |
회전 후의 결과는 다음과 같습니다.
| 2 | 9 | 1 |
| 1 | 6 | 5 |
| 3 | 3 | 7 |
해결 접근 방법
시계 방향 90도 회전의 핵심 원리는 간단합니다. 회전된 행렬의 첫 번째 열은 원본 행렬의 마지막 행과 같다는 점을 이용하는 것입니다. 이를 단계별로 정리하면 다음과 같습니다.
- 임시 리스트
temp_mat = []를 준비하고, 열 인덱스를 나타낼 변수를 설정합니다. col을 0부터 행렬 길이까지 반복합니다.- 임시 리스트
temp = []를 생성합니다. row를 행렬 길이 - 1부터 -1까지(즉, 마지막 행부터 첫 번째 행까지 역순으로) 반복합니다.matrix[row][col]값을temp에 추가합니다.
- 완성된
temp를temp_mat에 추가합니다.
- 임시 리스트
- 마지막으로
i,j를 0부터 행렬 길이까지 반복하며matrix[i][j] = temp_mat[i][j]로 원본 행렬을 회전된 결과로 덮어씁니다.
이 방식은 새로운 임시 행렬을 사용하기 때문에 구현이 직관적이고 이해하기 쉽다는 장점이 있습니다.
예제(Python)
아래 구현 예제를 통해 더 자세히 이해해 보겠습니다.
class Solution(object): def rotate(self, matrix): temp_matrix = [] column = len(matrix)-1 for column in range(len(matrix)): temp = [] for row in range(len(matrix)-1,-1,-1): temp.append(matrix[row][column]) temp_matrix.append(temp) for i in range(len(matrix)): for j in range(len(matrix)): matrix[i][j] = temp_matrix[i][j] return matrix ob1 = Solution() print(ob1.rotate([[1,5,7],[9,6,3],[2,1,3]]))
입력
[[1,5,7],[9,6,3],[2,1,3]]
출력
[[2,9,1],[1,6,5],[3,3,7]]