SW개발/코딩테스트

[LeetCode]Rotate Image

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

 

Rotate Image - LeetCode

Can you solve this real interview question? Rotate Image - You are given an n x n 2D matrix representing an image, rotate the image by 90 degrees (clockwise). You have to rotate the image in-place [https://en.wikipedia.org/wiki/In-place_algorithm], which m

leetcode.com

 

문제 분석

주어진 이미지를 90도 시계방향으로 돌리는 경우 숫자가 어떻게 변해있는지를 구하는 문제입니다.

 

처음 시도한 답안

class Solution:
    def rotate(self, matrix: List[List[int]]) -> None:
        """
        Do not return anything, modify matrix in-place instead.
        """
        matrix_len = len(matrix)

        matrix.reverse()
        """
        matrix.reverse()
        1 2 3      7 8 9
        4 5 6  =>  4 5 6 
        7 8 9      1 2 3

        after two for loop.
        i = 0
        7 8 9      7 4 1
        4 5 6  =>  8 5 6 
        1 2 3      9 2 3

        i = 1
        7 4 1      7 4 1
        8 5 6  =>  8 5 2 
        9 2 3      9 6 3

        i = 2
        7 4 1      7 4 1
        8 5 2  =>  8 5 2 
        9 6 3      9 6 3
        """

        for i in range(matrix_len):
            for j in range(i, matrix_len):
                matrix[i][j], matrix[j][i] = matrix[j][i], matrix[i][j]

접근 방법

  1. matrix에 담긴 행의 순서를 거꾸로 뒤집습니다.
  2. 이중 반복문을 통해서 (0, 0) & (0, 0), (0, 1) & (1, 0), (0, 2) & (2, 0) 의 쌍을 서로 스왑합니다. 
    (i,j 를 서로 스왑합니다, 즉 대각선을 중심으로 뒤집는 것과 같습니다)

처음에 접근한 방식은 행을 반복하면서 바꿔야할 x 좌표와 y 좌표를 구해서 변경하려고 했습니다. 하지만 이렇게 하다보니 추가적인 저장공간을 사용하지 않고서는 모든 요소에 맞는 숫자를 구할 수 없었습니다. 문제의 조건에 다른 2D maxtrix를 할당하지 말라는 것이 있으므로 솔루션을 참고해보았습니다.

 

솔루션의 접근법은 주석을 통해서 쉽게 이해할 수 있습니다. 주어진 이미지를 조금 더 깊게 살펴보았다면 위와 같은 아이디어를 생각해낼 수도 있지 않았을까 합니다.

 

728x90

'SW개발 > 코딩테스트' 카테고리의 다른 글

[LeetCode]Maximum Subarray  (0) 2023.05.21
[LeetCode]Group Anagrams  (0) 2023.05.10
[LeetCode]Permutations  (0) 2023.05.08
[LeetCode]Jump Game II  (0) 2023.05.07
[LeetCode]Combination Sum  (0) 2023.05.06