[JAVA/LeetCode] Top 100 Liked Question: 48. Rotate Image

👀 문제

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

👊 도전

1. 설계

  1. DP를 이용한다.
  2. i 위치에서 건너뛸 수 있는 max를 구하고, 1~max까지 뛰어본다.

2. 구현

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
/**
 *
 * @author HEESOO
 *
 */
class Solution {
    public void rotate(int[][] matrix) {
        int n=matrix.length;
        int top=0, down=n-1;
        while(top<down){ // 위와 아래 행렬을 swap, 둘이 만날 때 까지 반복
            int[] temp=matrix[top];
            matrix[top]=matrix[down];
            matrix[down]=temp;
            top++;
            down--;
        }
        
        for(int i=0;i<n;i++){ // 대각선 기준 대칭 swap
            for(int j=i+1;j<n;j++){
                int temp=matrix[i][j];
                matrix[i][j]=matrix[j][i];
                matrix[j][i]=temp;
            }
        }
    }
}

3. 결과

실행결과 🤟 성공 🤟

4. 설명

  1. 위와 아래 행렬을 swap
    • 먼저 행렬의 위 아래를 swap한다.
    • [[1,2,3],[4,5,6],[7,8,9]] -> [[7,8,9],[4,5,6],[1,2,3]] 꼴로 바꿔준다.
    • 맨 위와 아래만 바꾸는 것이 아니라, 서로 좁혀가며 계속 바꾼다.
  2. 대각선 기준 대칭 swap
    • [[7,8,9],[4,5,6],[1,2,3]] -> [[7,4,1],[8,5,2],[9,6,3]] 으로 바꾼다.
    • i==j 인 대각선(y=-x) 을 기준으로 swap한다.

👏 해결 완료!

어떻게 이런 생각을 할 수 있는건가요 세넓코잘많…………