[LeetCode] Largest Local Values in a Matrix

아르당·2026년 9월 3일

LeetCode

목록 보기
504/561
post-thumbnail

문제를 이해하고 있다면 바로 풀이를 보면 됨
전체 코드로 바로 넘어가도 됨
마음대로 번역해서 오역이 있을 수 있음

Problem

n x n 정수 행렬 grid가 주어진다.
다음을 만족하는 (n - 2) x (n - 2) 크기의 정수 행렬 maxLocal을 생성해라.

  • maxLocal[i][j]는 grid에서 행 i + 1, 열 j + 1을 중심으로 3 x 3 행렬의 최댓값과 같다.

다시 말해, 그리드 내의 모든 연속된 3 x 3행렬에서 최댓값을 찾는다.
생성된 행렬을 반환해라.

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: 위 다이어그램은 원본 행렬과 생성된 행렬을 보여준다.
생성된 행렬의 각 값이 그리드에서 연속된 3 x 3행렬의 최댓값에 해당한다는 점이다.

#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]]

Constraints

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

Solved

class Solution {
    public int[][] largestLocal(int[][] grid) {
        int n = grid.length;
        int[][] result = new int[n - 2][n - 2];

        for(int row = 0; row < n - 2; row++){
            for(int col = 0; col < n - 2; col++){
                result[row][col] = findLargest(grid, row, col);
            }
        }

        return result;
    }

    private int findLargest(int[][] grid, int row, int col){
        int max = grid[row][col];

        for(int i = row; i < row + 3; i++){
            for(int j = col; j < col + 3; j++){
                max = Math.max(max, grid[i][j]);
            }
        }

        return max;
    }
}
profile
내 마음대로 코드 작성하는 세상

0개의 댓글