티스토리 뷰

Problem Solving

[leetcode][C++] rotate image

틔틔 2021. 10. 16. 21:54

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

 

 

[leetcode][C++] rotate image

 

 

처음엔 노가다 구현을 했지만..

배열을 시계방향으로 90도 회전 = 대각선 대칭 값 변경 + 좌우 대칭 값 변경

 

1 2 3
4 5 6
7 8 9

         ↓            대각선 대칭 값 변경

1 4 7
2 5 8
3 6 9

         ↓            좌우 대칭 값 변경

7 4 1
8 5 2
9 6 3

 

이렇게 구현하면 훨씬 금방 짤 수 있다.

옛날에 인적성 수학문제 풀 때 이런 방법이 있다는 걸 배웠던 것 같기도 하다..

 

 

class Solution {
public:
    void rotate(vector<vector<int>>& matrix) {
        int n = matrix.size();
        for (int i = 0; i <= n / 2 - 1; i++) {
            for (int j = i; j <= n - 2 - i; j++) {
                int tmp = matrix[i][j];
                matrix[i][j] = matrix[n - 1 - j][i];
                matrix[n - 1 - j][i] = matrix[n - 1 - i][n - 1 - j];
                matrix[n - 1 - i][n - 1 - j] = matrix[j][n - 1 - i];
                matrix[j][n - 1 - i] = tmp;
            }
        }
    }
};


// Approach 2: Reverse on Diagonal and then Reverse Left to Right
class Solution {
public:
    void rotate(vector<vector<int>>& matrix) {
        int n = matrix.size();
        for (int i = 0; i < n; i++) {
            for (int j = i + 1; j < n; j++) {
                swap(matrix[i][j], matrix[j][i]);
            }
        }

        for (int i = 0; i < n; i++) {
            for (int j = 0; j < n/2; j++) {
                swap(matrix[i][j], matrix[i][n - 1 - j]);
            }
        }
    }
};

 

댓글