문제를 이해하고 있다면 바로 풀이를 보면 됨
전체 코드로 바로 넘어가도 됨
마음대로 번역해서 오역이 있을 수 있음
n x n 정수 행렬 grid가 주어진다.
다음을 만족하는 (n - 2) x (n - 2) 크기의 정수 행렬 maxLocal을 생성해라.
다시 말해, 그리드 내의 모든 연속된 3 x 3행렬에서 최댓값을 찾는다.
생성된 행렬을 반환해라.
#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]]
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;
}
}