가장 큰 정사각형 찾기 https://programmers.co.kr/learn/courses/30/lessons/12905
DP 문제로 해결했습니다.
borad(i, j)
에서 왼쪽, 위, 왼쪽 위를 탐색했을 때 최솟값 +1이 해당 자리에서 만들 수 있는 최대의 정사각형입니다.
예를들어 하나라도 0이라면 정사각형이 성립되지 않으므로 자기 자신인 1만 남게됩니다.
최솟값이 1이 라면 적어도 4개로 정사각형을 만들 수 있어 +1인 2,
최솟값이 2리면 적어도 9개로 정사각형을 만들 수 있다는 얘기입니다.
function solution(board) {
const y_len = board.length;
const x_len = board[0].length;
let max = -1;
for (let i = 1; i < y_len; i++) {
for (let j = 1; j < x_len; j++) {
if (board[i][j] > 0) {
const min = Math.min(
board[i][j - 1],
board[i - 1][j],
board[i - 1][j - 1]
);
board[i][j] = min + 1;
}
if (board[i][j] > max) max = board[i][j];
}
}
return max * max;
}