[리트코드] 48. Rotate Image
48. Rotate Image
첫번째 풀이
var rotate = function (matrix) {
const len = matrix.length - 1;
const temp = Array.from(Array(len + 1), () => Array(len + 1).fill(null));
for (let i = 0; i <= len; i++) {
for (let j = 0; j <= len; j++) {
temp[i][j] = matrix[len - j][i];
}
}
return matrix;
};
문제부터 파악하기 위해 새로운 배열을 만들어 시계방향으로 90도 회전한 배열을 만들었다.
정상 동작하지만 문제의 조건은 새 배열을 만들지 않고, 기존 배열에서 변경하라고 한다.
정답 코드
/**
* @param {number[][]} matrix
* @return {void} Do not return anything, modify matrix in-place instead.
*/
const swap = (arr, x, y, a, b) => {
let temp = arr[x][y];
arr[x][y] = arr[a][b];
arr[a][b] = temp;
};
var rotate = function (matrix) {
const len = matrix.length - 1;
for (let i = 0; i <= len / 2; i++) {
for (let j = 0; j <= len; j++) {
swap(matrix, i, j, len - i, j);
}
}
for (let i = 0; i <= len; i++) {
for (let j = i + 1; j <= len; j++) {
swap(matrix, i, j, j, i);
}
}
};
swap 함수를 만들어 배열의 값을 교환할 수 있도록 하였다.
우선 위아래로 교환하고,
대각선을 기준으로 swap 하였다.
처음에는 for문을 len만큼 돌릴려고 했으나, 이미 swap한 부분을 다시 swap 하게 되어 실행 횟수를 절반으로 줄였다.
Runtime: 64 ms, faster than 97.40% of JavaScript online submissions for Rotate Image.