
😎풀이
dp
배열 초기화
- 2중 반복을 통해
matrix
순회
2-1. matrix[i][j]
가 1인 경우 탐색
2-2. 첫 행 혹은 첫 열이라면 matrix[i][j]
에서 끝나는 변의 길이는 항상 1
2-3. 왼쪽, 윗쪽, 대각선 왼쪽 위 모두 채워져 있어야 하므로 최솟값 탐색 및 + 1한 값을 현재 dp
에 적용
2-4. 최대 길이의 변 갱신
- 최대 길이 변의 제곱 반환
function maximalSquare(matrix: string[][]): number {
const m = matrix.length;
const n = matrix[0].length;
const dp: number[][] = Array(m).fill(0).map(() => Array(n).fill(0));
let maxSide = 0;
for (let i = 0; i < m; i++) {
for (let j = 0; j < n; j++) {
if (matrix[i][j] === "1") {
if (i === 0 || j === 0) {
dp[i][j] = 1;
} else {
dp[i][j] = Math.min(dp[i-1][j], dp[i][j-1], dp[i-1][j-1]) + 1;
}
maxSide = Math.max(maxSide, dp[i][j]);
}
}
}
return maxSide * maxSide;
}