프로그래머스[Level 2] 가장 큰 정사각형

bkboy·2022년 6월 24일
0

문제

1와 0로 채워진 표(board)가 있습니다. 표 1칸은 1 x 1 의 정사각형으로 이루어져 있습니다. 표에서 1로 이루어진 가장 큰 정사각형을 찾아 넓이를 return 하는 solution 함수를 완성해 주세요. (단, 정사각형이란 축에 평행한 정사각형을 말합니다.)

제한 사항

  • 표(board)는 2차원 배열로 주어집니다.
  • 표(board)의 행(row)의 크기 : 1,000 이하의 자연수
  • 표(board)의 열(column)의 크기 : 1,000 이하의 자연수
  • 표(board)의 값은 1또는 0으로만 이루어져 있습니다.

입출력 예

풀이

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;
}


출처 : https://velog.io/@proshy/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4JS-%EA%B0%80%EC%9E%A5-%ED%81%B0-%EC%A0%95%EC%82%AC%EA%B0%81%ED%98%95-%EC%B0%BE%EA%B8%B0

dp 문제이다.

첫번째 행과 열은 건너띄고, 다음부터 값이 존재하면(0이 아니면) 위, 아래, 대각선 방향을 확인해서 그 중 최솟값에 +1 한 값으로 갱신해나가면 된다.

가장 큰 갱신 값의 제곱이 정사각형의 넓이가 된다.

profile
음악하는 개발자

0개의 댓글