동적 계획법 예제 - 8

문제 분석

  • 가장 큰 정사각형의 넓이를 구하는 것은 가장 큰 정사각형의 한 변의 길이를 구한다는 것과 동일하다.

  • 따라서 변의 길이를 dp[i][j]로 정의할 수 있다.

  • 점화식 정의

    • dp[i][j] = (i, j)의 위치를 오른쪽 아래 꼭짓점으로 정하고, 해당 자리에서 그릴 수 있는 가장 큰 정사각형의 한 변의 길이

  • 이렇게 정의하면 dp 테이블을 채우는 방식, 즉 점화식 아이디어를 생각할 수 있다.

  • 다음 그림에서 물음표 위치의 원래 값이 1일 경우, 이 위치에서 위, 왼쪽, 대각선 왼쪽 위에 있는 값 중 가장 작은 값에 1을 더한 값으로 변경한다.

  • 원래 값이 0일 경우는 생각하지 않는다.

img_16.png

손으로 풀어보기

  1. dp 테이블의 값을 초기화한다.

img_17.png
  1. 점화식을 이용해 dp 테이블의 값을 새로 채운다.

    • dp[i][j] = min(dp[i - 1][j - 1], dp[i - 1][j], dp[i][j - 1]) => 현재 자리의 값이 1일 경우

    • dp[i][j] = 0 => 현재 자리의 값이 0일 경우

img_18.png
  1. dp 테이블 중 가장 큰 값의 제곱이 최대 정사각형의 넓이이다.

슈도코드

코드 구현 - 파이썬

코드 구현 - 자바

Last updated