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

Python으로 2D 행렬 이미지 시계 방향 90도 회전하기


문제 설명

하나의 이미지를 나타내는 2차원(2D) 행렬이 있다고 가정해 보겠습니다. 우리가 해야 할 작업은 이 이미지를 시계 방향으로 90도 회전하는 것입니다.

예를 들어, 다음과 같은 이미지가 있다면:

157
963
213

회전 후의 결과는 다음과 같습니다.

291
165
337

해결 접근 방법

시계 방향 90도 회전의 핵심 원리는 간단합니다. 회전된 행렬의 첫 번째 열은 원본 행렬의 마지막 행과 같다는 점을 이용하는 것입니다. 이를 단계별로 정리하면 다음과 같습니다.

  • 임시 리스트 temp_mat = []를 준비하고, 열 인덱스를 나타낼 변수를 설정합니다.
  • col을 0부터 행렬 길이까지 반복합니다.
    • 임시 리스트 temp = []를 생성합니다.
    • row를 행렬 길이 - 1부터 -1까지(즉, 마지막 행부터 첫 번째 행까지 역순으로) 반복합니다.
      • matrix[row][col] 값을 temp에 추가합니다.
    • 완성된 temptemp_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]]