알고리즘/코딩테스트-NeetCode

[NeetCode-LeetCode] Rotate Image JAVA

kwang2134 2025. 1. 17. 20:38
728x90
반응형
728x90

[NeetCode-LeetCode] Rotate Image - Medium


접근

  • 행렬 회전

풀이

n x n 배열의 원소들을 90도로 회전한 결과를 반환하는 문제이다. 원소를 그대로 오른쪽 90도로 돌린 상태로 만들면 되는데 추가 적인 공간을 할당하지 않고 주어진 배열을 조작해서 변경해야 한다. 수학과 공간 지각 문제다 보니 조금 만나기 싫은 유형의 문제였다.

    public void rotate(int[][] matrix) {
        int n = matrix.length;

        for (int i = 0; i < n; i++) {
            for (int j = i + 1; j < n; j++) {
                int temp = matrix[i][j];
                matrix[i][j] = matrix[j][i];
                matrix[j][i] = temp;
            }
        }

90도로 회전하는 방법은 행렬을 전치한 뒤에 각 행을 뒤집게 되면 90도로 전환이 된다고 한다. 위는 행렬을 전치하는 과정으로 행과 열의 위치를 바꾸는 것이다. 

	for (int i = 0; i < n; i++) {
            int a = 0;
            int b = n - 1;

            while (a < b) {
                int temp = matrix[i][a];
                matrix[i][a] = matrix[i][b];
                matrix[i][b] = temp;
                a++;
                b--;
            }
        }

전치된 행렬에서 행을 거꾸로 뒤집는 과정으로 이 과정까지 수행하고 나면 행렬을 90도로 회전한 형태가 된다.

//원본 matrix
[5, 1, 9, 11]
[2, 4, 8, 10]
[13, 3, 6, 7]
[15, 14, 12, 16]

//전치 후
[5, 2, 13, 15]
[1, 4, 3, 14]
[9, 8, 6, 12]
[11, 10, 7, 16]

//행 뒤집기 후
[15, 13, 2, 5]
[14, 3, 4, 1]
[12, 6, 8, 9]
[16, 7, 10, 11]

위와 같은 과정을 거치고 90도로 돌아간 형태가 된다.

행렬 회전


전체 코드

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

        for (int i = 0; i < n; i++) {
            for (int j = i + 1; j < n; j++) {
                int temp = matrix[i][j];
                matrix[i][j] = matrix[j][i];
                matrix[j][i] = temp;
            }
        }

        for (int i = 0; i < n; i++) {
            int a = 0;
            int b = n - 1;

            while (a < b) {
                int temp = matrix[i][a];
                matrix[i][a] = matrix[i][b];
                matrix[i][b] = temp;
                a++;
                b--;
            }
        }
    }
}
728x90