매일 조금씩

Leet code (Medium): 48. Rotate Image - JAVA 본문

알고리즘/Matrix

Leet code (Medium): 48. Rotate Image - JAVA

mezo 2024. 10. 22. 13:22
728x90
반응형

 

 

주어진 matrix를 보고, 특징 파악을 먼저 해야한다.

처음 파악한 특징은 문제에 언급된 대로 90도 회전한 형태가 된다는건데..

이를 그대로 코드로 짜기란 복잡하고 어렵다.

따라서 '회전' 보다는 '스왑', '대칭이동' 과 같은 동작으로 특징을 파악해야한다.

 

그럼 칸들을 가운데 가로선을 기준으로 대칭이동 시킨 다음,

(0,0) -> (n,n)으로 향하는 대각선을 기준으로 한번더 대칭이동 시킨 형태라는 것을 알 수 있다.

 

다음은 그 방식으로 풀어낸 코드이다.

 

class Solution {
    public void rotate(int[][] matrix) {   
        int edgeLength = matrix.length;

        int top = 0;
        int bottom = edgeLength - 1;

        // 가운데 가로선 기준 반전시키기
        while(top < bottom){
            for(int col = 0; col < edgeLength; col++){
                int temp = matrix[top][col];
                matrix[top][col] = matrix[bottom][col];
                matrix[bottom][col] = temp;
            }
            top++;
            bottom--;
        }    
        
        // 대각선 기준 반전시키기
        for(int row = 0; row < edgeLength; row++){
            for(int col = row + 1; col < edgeLength; col++){
                int temp = matrix[row][col];
                matrix[row][col] = matrix[col][row];
                matrix[col][row] = temp;
            }
        }    
    }
}
728x90
반응형