반응형
https://leetcode.com/problems/rotate-image/description/
문제
You are given an n x n 2D matrix representing an image, rotate the image by 90 degrees (clockwise).
You have to rotate the image in-place, which means you have to modify the input 2D matrix directly. DO NOT allocate another 2D matrix and do the rotation.
Example 1:
Input: matrix = [[1,2,3],[4,5,6],[7,8,9]]
Output: [[7,4,1],[8,5,2],[9,6,3]]
Example 2:
Input: matrix = [[5,1,9,11],[2,4,8,10],[13,3,6,7],[15,14,12,16]]
Output: [[15,13,2,5],[14,3,4,1],[12,6,8,9],[16,7,10,11]]
Constraints:
- n == matrix.length == matrix[i].length
- 1 <= n <= 20
- -1000 <= matrix[i][j] <= 1000
풀이
풀이 과정
n x n 사이즈의 정사각형 모양 2차원 배열이 주어질 때 시계방향으로 90도 회전한 배열을 구해야한다.
다만 완성된 배열은 새로 만들어진 다른 2차원 배열이 아닌 주어진 배열안에서만 값을 변경하여야한다.
가운데 행을 기준으로 위아래 요소들을 반전시키고 왼쪽 위부터 오른쪽 아래를 잇는 선을 기준으로 요소들을 반전시키면 시계방향으로 90도 회전시킨 모양을 얻을 수 있다.
최종 코드
class Solution {
public void rotate(int[][] matrix) {
int length = matrix.length;
// 배열의 값을 교체할 때 사용할 임시 변수
int temp = 0;
// 가운데 행을 기준으로 위아래를 반전
for(int i = 0; i < length/2; i++) {
for(int j = 0; j < length; j++) {
temp = matrix[i][j];
matrix[i][j] = matrix[length - i - 1][j];
matrix[length - i - 1][j] = temp;
}
}
// 왼쪽위부터 오른쪽아래를 잇는 선을 기준으로 반전
for(int i = 0; i < length; i++) {
for(int j = i; j < length; j++) {
temp = matrix[i][j];
matrix[i][j] = matrix[j][i];
matrix[j][i] = temp;
}
}
}
}
'알고리즘 > LeetCode' 카테고리의 다른 글
[LeetCode] 98. Validate Binary Search Tree - Java (0) | 2023.01.30 |
---|---|
[LeetCode] 79. Word Search - Java (0) | 2023.01.29 |
[LeetCode] 54. Spiral Matrix - Java (0) | 2023.01.27 |
[LeetCode] 73. Set Matrix Zeroes - Java (0) | 2023.01.26 |
[LeetCode] 143. Reorder List - Java (0) | 2023.01.24 |