작심삼일

[LeetCode] 1260 | Shift 2D Grid | Python 본문

스터디/코테

[LeetCode] 1260 | Shift 2D Grid | Python

yun_s 2022. 4. 11. 15:49
728x90
반응형

문제 링크: https://leetcode.com/problems/shift-2d-grid/


문제

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.


조건

  • m == grid.length
  • n == grid[i].length
  • 1 <= m <= 50
  • 1 <= n <= 50
  • -1000 <= grid[i][j] <= 1000
  • 0 <= k <= 100

내 풀이

H, W를 각각 grid의 높이와 너비로 한다.

k의 값이 매우 커질 수 있읜 H*W로 나눈 나머지로 바꾼다.

 

2차원 배열을 1차원으로 폈을 때의 위치(h*W + w)를 이용해 k만큼 이동시킨 후, 이것을 다시 2차원으로 만든다.


코드

class Solution:
    def shiftGrid(self, grid: List[List[int]], k: int) -> List[List[int]]:
        H, W = len(grid), len(grid[0])
        ngrid = [[0 for _ in range(W)] for _ in range(H)]
        k %= (H*W)
        
        for h in range(H):
            for w in range(W):
                temp = h*W + w + k
                dh, dw = temp//W, temp%W
                ngrid[dh%H][dw%W] = grid[h][w]
        
        return ngrid
728x90
반응형
Comments