본문 바로가기

Leetcode

[Leetcode][Python] 48. Rotate Image

리트코드 / 파이썬 / 48. Rotate Image

https://leetcode.com/problems/rotate-image/

 

 

Rotate Image - LeetCode

Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.

leetcode.com

풀이 방법

주어진 array를 90도 회전하라는 문제인데, 행렬의 연산을 이리저리 하다 보면 90도 회전한 array를 볼 수 있다.

첫번째 방법1. transpose(전치) 2. array의 열 뒤집기를 하는 방법이다.

 

 

 

두번째 방법은 아래 그림과 같이 element를 한 번에 4개씩 회전해주는 방법이다.

 

 

그림에서는 노란색->빨간색->초록색 순으로 iteration을 돌면서 오른쪽 위 첨자가 같은 element들끼리 90도씩 회전하여 자리를 바꿔준다.row, column 순회 방향은 각각 그림의 파랑색 1번, 2번이다. 

 

 

소스 코드

첫번째 방법

 

class Solution(object):
    def rotate(self, matrix):
        matrix_len = len(matrix)
        for ix, x in enumerate(matrix):
            for iy, y in enumerate(x):
                if iy <= ix:
                    continue
                matrix[ix][iy] = matrix[iy][ix]
                matrix[iy][ix] = y

        for col in range(matrix_len // 2):
            for row in range(matrix_len):
                temp = matrix[row][col]
                matrix[row][col] = matrix[row][matrix_len - 1 - col]
                matrix[row][matrix_len - 1 - col] = temp

        print(matrix)
        return matrix

 

두번째 방법

 

class Solution(object):
    def rotate(self, matrix):
        n = len(matrix)
        for i in range(n // 2):
            for j in range(i, n - i - 1):
                matrix[i][j], matrix[j][~i], matrix[~i][~j], matrix[~j][i] = \
                    matrix[~j][i], matrix[i][j], matrix[j][~i], matrix[~i][~j]