Notice
Recent Posts
Recent Comments
Link
«   2026/02   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
Archives
Today
Total
관리 메뉴

hwooo

LeetCode (C/C++, Java) 48. Rotate Image 본문

Study/Algorithm

LeetCode (C/C++, Java) 48. Rotate Image

hwooo 2024. 12. 24. 00:30

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

 


풀이

결과적으로 봤을 때 한 번에 네 군데의 값이 바뀌므로
바깥쪽 바퀴부터 안쪽까지 순회하며 각 라인의 값을 저장한 후 한 번에 바꿨다.


C/C++ 코드

class Solution {
public:
    void rotate(vector<vector<int>>& matrix) {
        int size = matrix.size();
        int leftIdx = 0, rightIdx = size - 1;

        int l, r, u, d;
        while (leftIdx < rightIdx) {

            // u -> r -> d -> l
            for (int i = leftIdx; i < rightIdx; i++) {
                u = matrix[leftIdx][i];
                d = matrix[rightIdx][size - i - 1];
                l = matrix[size - i - 1][leftIdx];
                r = matrix[i][rightIdx];
                
                matrix[i][rightIdx] = u;
                matrix[rightIdx][size - i - 1] = r;
                matrix[size - i - 1][leftIdx] = d;
                matrix[leftIdx][i] = l;
            }
            leftIdx++;
            rightIdx--;
        }
    }
};

 

Java 코드

class Solution {
    public void rotate(int[][] matrix) {
        int size = matrix.length;
        int leftIdx = 0, rightIdx = size - 1;

        int l, r, u, d;
        while (leftIdx < rightIdx) {

            // u -> r -> d -> l
            for (int i = leftIdx; i < rightIdx; i++) {
                u = matrix[leftIdx][i];
                d = matrix[rightIdx][size - i - 1];
                l = matrix[size - i - 1][leftIdx];
                r = matrix[i][rightIdx];
                
                matrix[i][rightIdx] = u;
                matrix[rightIdx][size - i - 1] = r;
                matrix[size - i - 1][leftIdx] = d;
                matrix[leftIdx][i] = l;
            }
            leftIdx++;
            rightIdx--;
        }
    }
}