👀 문제
https://leetcode.com/problems/rotate-image/
👊 도전
1. 설계
- DP를 이용한다.
- 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. 설명
- 위와 아래 행렬을 swap
- 먼저 행렬의 위 아래를 swap한다.
- [[1,2,3],[4,5,6],[7,8,9]] -> [[7,8,9],[4,5,6],[1,2,3]] 꼴로 바꿔준다.
- 맨 위와 아래만 바꾸는 것이 아니라, 서로 좁혀가며 계속 바꾼다.
- 대각선 기준 대칭 swap
- [[7,8,9],[4,5,6],[1,2,3]] -> [[7,4,1],[8,5,2],[9,6,3]] 으로 바꾼다.
- i==j 인 대각선(y=-x) 을 기준으로 swap한다.
👏 해결 완료!
어떻게 이런 생각을 할 수 있는건가요 세넓코잘많…………