rotate image

    행렬을 시계방향으로 90도 만큼 회전 시키는 문제이다.

     

    90도 회전은

    1. 행렬을 전치(Transpose) 한다.
    2. 전치된 행렬에서 각 행에 저장된 값을 역순으로 한다.

    이 순서를 따르면 행렬이 90도 회전된 결과를 얻을 수 있다. 다만, 문제에서는 in-place 회전을 원하기 때문에 다른 방법을 이용해야 한다.

     

    다른 방법으로 90도 회전시키기 위해서는

    1. 행렬의 길이 n이라고 했을 때 윗쪽 절반 행들과 아랫쪽 절반 행들의 위치를 바꾼다.
    2. 위치를 바꾼 후에 모든 원소에 대해서 (r,c) 와 (c,r)에 위치하는 값을 한번만 바꾼다.

    Rotate Image 문제 원본

    from typing import List
    
    
    class Solution:
        def rotate(self, matrix: List[List[int]]) -> None:
            for r in range(len(matrix) // 2):
                matrix[r], matrix[len(matrix) - r - 1] = matrix[len(matrix) - r - 1], matrix[r]
    
            visited = []
            for r in range(len(matrix)):
                for c in range(len(matrix)):
                    if r != c and (r, c) not in visited:
                        visited.append((r, c))
                        visited.append((c, r))
                        matrix[r][c], matrix[c][r] = matrix[c][r], matrix[r][c]
            print(matrix)
    
        def rotate2(self, matrix: List[List[int]]) -> None:
            matrix = [[col for col in row] for row in zip(*matrix)]
            for r in matrix:
                r.reverse()
            print(matrix)
    
    
    if __name__ == '__main__':
        arr = [
            [1, 2, 3],
            [4, 5, 6],
            [7, 8, 9]
        ]
        s = Solution()
        s.rotate(arr)
    

    깃헙 주소 github.com/papayetoo/StudyinPython/blob/master/LeetCode/rotate_image.py

    'Python > DSA' 카테고리의 다른 글

    [Union-Find] Friend-Circle  (0) 2020.10.05
    Longest Increment Subsequence  (0) 2020.09.03
    DP 문제 Number of dice rolls with target  (0) 2020.09.02
    Permutation(순열) 알고리즘  (0) 2020.08.29

    댓글