[LeetCode] Shift 2D Grid

준규·2022년 12월 28일
0

1.문제


Given a 2D grid of size m x n and an integer k. You need to shift the grid k times.

In one shift operation:

  • Element at grid[i][j] moves to grid[i][j + 1].
  • Element at grid[i][n - 1] moves to grid[i + 1][0].
  • Element at grid[m - 1][n - 1] moves to grid[0][0].

Return the 2D grid after applying shift operation k times.


mxn 크기의 2차원 배열이 주어질 때 이 행렬을 다음의 과정을 거치면 1번 shift하는 것이라고 정의한다

  • grid[i][j] 는 grid[i][j+1] 로 이동
  • grid[i][n-1] 은 grid[i+1][0] 로 이동
  • grid[m-1][n-1] 은 grid[0][0] 로 이동

이런 조건에서 grid를 k 번 shift 했을 때의 grid 를 리턴하는 문제이다.


Example 1

Input: grid = [[1,2,3],[4,5,6],[7,8,9]], k = 1
Output: [[9,1,2],[3,4,5],[6,7,8]]

Example 2

Input: grid = [[3,8,1,9],[19,7,2,5],[4,6,11,10],[12,0,21,13]], k = 4
Output: [[12,0,21,13],[3,8,1,9],[19,7,2,5],[4,6,11,10]]

Example 3

Input: grid = [[1,2,3],[4,5,6],[7,8,9]], k = 9
Output: [[1,2,3],[4,5,6],[7,8,9]]

2.풀이

  1. 2차원 배열을 while문을 돌면서 주어진 조건대로 하나하나 이동한다.
  2. k번 이동을 하면 while문을 멈추고 grid를 리턴한다.

/**
 * @param {number[][]} grid
 * @param {number} k
 * @return {number[][]}
 */
const shiftGrid = function (grid, k) {
  let count = 0;
  const m = grid.length;
  const n = grid[0].length;

  while (count < k) {
    //mxn 배열 생성하기
    const result = Array.from(Array(m), () => new Array(n).fill(0));
    for (let i = 0; i < m; i++) {
      for (let j = 0; j < n; j++) {
        // 2번 이동 규칙
        if (j === n - 1) {
          if (i + 1 < m) {
            result[i + 1][0] = grid[i][j];
          }
        } else {
          // 1번 이동규칙
          result[i][j + 1] = grid[i][j];
        }
      }
    }
    // 3번 이동규칙
    result[0][0] = grid[m - 1][n - 1];

    grid = result;
    count++;
  }

  return grid;
};

3.결과

profile
안녕하세요 :)

0개의 댓글