[리트코드] 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.