[프로그래머스#JS] 가장 큰 정사각형 찾기

dongwon·2021년 5월 2일
0

문제

가장 큰 정사각형 찾기 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;
}
profile
데이원컴퍼니 프론트엔드 개발자입니다.

0개의 댓글