문제
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.
이미지를 나타내는 n x n 2D 매트릭스가 제공되면 이미지를 90도(시계 방향) 회전합니다.
이미지는 제자리에서 회전해야 합니다. 즉, 입력 2D 매트릭스를 직접 수정해야 합니다. 다른 2D 매트릭스를 할당하지 않고 회전을 수행합니다.
예시
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
해결 과정
아직 matrix를 다루는 것이 익숙치 않아 NeetCode 강의를 보며 JavaScript로 코드를 변환하여 해결하였다.
해설을 잘 해주셔서 금방 이해할 수 있었다.
- 우선 left를 뜻하는 l, right를 뜻하는 r를 초기화한다. 각각 matrix의 인덱스 값을 할당한다.
- l < r 때까지 wile문을 순회한다.
- for문을 돈다. 이때 i 가 r - l보다 작을 때까지( == l < r ) 순회한다.
- top과 bottom을 l과 r로 초기화한다. (맨 꼭짓점부터 시작하기 때문)
- topleft, topright, bottomleft, bottomright를 시계방향으로 값을 바꾸어준다.
- 다음 for문에서는 한 칸씩 옆으로 이동해야 하기 때문에 이동할 인덱스에 + i, - i 처리를 한다.
- for문을 다 돌았다면 inner matrix에 접근하기 위해 r++, l--를 한다.
- for문을 돈다. 이때 i 가 r - l보다 작을 때까지( == l < r ) 순회한다.
- while문의 순회가 끝나면 원본 matrix의 값이 변해있기 때문에 따로 반환을 하지 않아도 된다.
해결 코드
/**
* @param {number[][]} matrix
* @return {void} Do not return anything, modify matrix in-place instead.
*/
var rotate = function(matrix) {
let l = 0;
let r = matrix.length - 1;
while(l < r){
for(let i = 0 ; i < r - l; i++){
let top = l;
let bottom = r;
// save the topleft
let topLeft = matrix[top][l + i];
// move bottom left into top left
matrix[top][l + i] = matrix[bottom - i][l];
//move bottom right into botom left
matrix[bottom - i][l] = matrix[bottom][r - i];
// move top right into bottom right
matrix[bottom][r - i] = matrix[top + i][r];
// move top left into top right
matrix[top + i][r] = topLeft;
}
r -= 1;
l += 1;
}
};
참고 사이트
NeetCode : Rotate Image - Matrix - Leetcode 48
https://www.youtube.com/watch?v=fMSJSS7eO1w
'leetCode' 카테고리의 다른 글
[Medium] Spiral Matrix (0) | 2022.07.01 |
---|---|
[Easy] 1886. Determine Whether Matrix Can Be Obtained By Rotation (0) | 2022.06.30 |
[Easy] 58. Length of Last Word (0) | 2022.06.17 |
[Medium] 739. Daily Temperatures (0) | 2022.06.17 |
[Easy] 67. Add Binary (0) | 2022.06.15 |
Comment