알고리즘/LeetCode

2373. Largest Local Values in a Matrix

앤테바 2022. 12. 23. 21:45
반응형

문제)

2373. Largest Local Values in a Matrix

 

You are given an n x n integer matrix grid.

Generate an integer matrix maxLocal of size (n - 2) x (n - 2) such that:

  • maxLocal[i][j] is equal to the largest value of the 3 x 3 matrix in grid centered around row i + 1 and column j + 1.

In other words, we want to find the largest value in every contiguous 3 x 3 matrix in grid.

Return the generated matrix.

 

Example 1:

Input: grid = [[9,9,8,1],[5,6,2,6],[8,2,6,4],[6,2,2,2]]
Output: [[9,9],[8,6]]
Explanation: The diagram above shows the original matrix and the generated matrix.
Notice that each value in the generated matrix corresponds to the largest value of a contiguous 3 x 3 matrix in grid.

Example 2:

Input: grid = [[1,1,1,1,1],[1,1,1,1,1],[1,1,2,1,1],[1,1,1,1,1],[1,1,1,1,1]]
Output: [[2,2,2],[2,2,2],[2,2,2]]
Explanation: Notice that the 2 is contained within every contiguous 3 x 3 matrix in grid.

 

Constraints:

  • n == grid.length == grid[i].length
  • 3 <= n <= 100
  • 1 <= grid[i][j] <= 100

솔루션1)

- Colvolution 개념이 들어간 문제

class Solution:
    def largestLocal(self, grid: List[List[int]]) -> List[List[int]]:
        row, col = len(grid), len(grid[0])
        print(row, col)
        
        ret = []
        for r in range(0, row-2):
            new_row = []
            for c in range(0, col-2):
                max_val = self.max_in_matrix(grid, r, c, r+2, c+2)
                new_row.append(max_val)
            ret.append(new_row)                
        
        return ret
        
    
    def max_in_matrix(self, grid, row1, col1, row2, col2):
        max_val = 0
        for r in range(row1, row2+1):
            for c in range(col1, col2+1):
                max_val = max(max_val, grid[r][c])
        return max_val

 

반응형