티스토리 뷰
https://leetcode.com/problems/rotate-image/
[leetcode][C++] rotate image
처음엔 노가다 구현을 했지만..
배열을 시계방향으로 90도 회전 = 대각선 대칭 값 변경 + 좌우 대칭 값 변경
1 | 2 | 3 |
4 | 5 | 6 |
7 | 8 | 9 |
↓ 대각선 대칭 값 변경
1 | 4 | 7 |
2 | 5 | 8 |
3 | 6 | 9 |
↓ 좌우 대칭 값 변경
7 | 4 | 1 |
8 | 5 | 2 |
9 | 6 | 3 |
이렇게 구현하면 훨씬 금방 짤 수 있다.
옛날에 인적성 수학문제 풀 때 이런 방법이 있다는 걸 배웠던 것 같기도 하다..
class Solution {
public:
void rotate(vector<vector<int>>& matrix) {
int n = matrix.size();
for (int i = 0; i <= n / 2 - 1; i++) {
for (int j = i; j <= n - 2 - i; j++) {
int tmp = matrix[i][j];
matrix[i][j] = matrix[n - 1 - j][i];
matrix[n - 1 - j][i] = matrix[n - 1 - i][n - 1 - j];
matrix[n - 1 - i][n - 1 - j] = matrix[j][n - 1 - i];
matrix[j][n - 1 - i] = tmp;
}
}
}
};
// Approach 2: Reverse on Diagonal and then Reverse Left to Right
class Solution {
public:
void rotate(vector<vector<int>>& matrix) {
int n = matrix.size();
for (int i = 0; i < n; i++) {
for (int j = i + 1; j < n; j++) {
swap(matrix[i][j], matrix[j][i]);
}
}
for (int i = 0; i < n; i++) {
for (int j = 0; j < n/2; j++) {
swap(matrix[i][j], matrix[i][n - 1 - j]);
}
}
}
};
'Problem Solving' 카테고리의 다른 글
[프로그래머스][C++] 멀쩡한 사각형 (0) | 2021.10.17 |
---|---|
[프로그래머스][C++] 124 나라의 숫자 (0) | 2021.10.17 |
[백준][C++] 17779 게리맨더링2 (0) | 2021.10.16 |
[leetcode][C++] sort colors (0) | 2021.10.15 |
[leetcode][C++][Java] jump game (0) | 2021.10.15 |
댓글