1와 0로 채워진 표(board)가 있습니다. 표 1칸은 1 x 1 의 정사각형으로 이루어져 있습니다. 표에서 1로 이루어진 가장 큰 정사각형을 찾아 넓이를 return 하는 solution 함수를 완성해 주세요. (단, 정사각형이란 축에 평행한 정사각형을 말합니다.)
function solution(board)
{
let answer = 0;
const row = board.length;
const column = board[0].length;
// 위, 왼쪽, 대각선 모두가 없을 수도 있어서
if(row <= 1 || column <= 1) return 1;
for(let i=1;i<row;i++){
for(let j=1;j<column;j++){
if(board[i][j] > 0){
const up = board[i-1][j];
const left = board[i][j-1];
const cross = board[i-1][j-1];
const min = Math.min(up, left, cross);
board[i][j] = min + 1;
answer = Math.max(answer, board[i][j]);
}
}
}
return answer * answer;
}
dp 문제이다.
첫번째 행과 열은 건너띄고, 다음부터 값이 존재하면(0이 아니면) 위, 아래, 대각선 방향을 확인해서 그 중 최솟값에 +1 한 값으로 갱신해나가면 된다.
가장 큰 갱신 값의 제곱이 정사각형의 넓이가 된다.