티스토리 뷰

728x90

문제 링크

문제 설명

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

예를 들어

 

1 2 3 4
0 1 1 1
1 1 1 1
1 1 1 1
0 0 1 0

 

가 있다면 가장 큰 정사각형은

 

1 2 3 4
0 1 1 1
1 1 1 1
1 1 1 1
0 0 1 0

가 되며 넓이는 9가 되므로 9를 반환해 주면 됩니다.

제한사항

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

입출력 예

board answer
[[0,1,1,1],[1,1,1,1],[1,1,1,1],[0,0,1,0]] 9
[[0,0,1,1],[1,1,1,1]] 4

 


입출력 예 설명

입출력 예 #1

위의 예시와 같습니다.

입출력 예 #2

| 0 | 0 | 1 | 1
| 1 | 1 | 1 | 1

로 가장 큰 정사각형의 넓이는 4가 되므로 4를 return합니다.


문제 풀이 방법

이 문제는 DP 방법으로 문제를 해결해야한다.

 

 

배열을 탐색하면서 값이 1일 때 해당 위치에서 가로, 세로, 대각선의 숫자를 확인 해야한다.
가로, 세로, 대각선의 값에서 최솟값을 구한 다음 +1 한 값으로 업데이트를 해준다.
이 값은 현재 위치에서 가지는 정사각형의 한변의 길이가 된다.

 

반복문을 끝내고 나면 이렇게 값이 변경이 된다.

 

가로, 세로, 대각선 모두 2일때를 보면 최솟값은 2가 되고 이 값에 +1 을 한 값은 3이 된다.

 

 

반복문이 끝나면 배열은 이렇게 값이 변하게 된다.
여기서 만들어진 배열에서 최대값을 구한 다음 정사각형의 넓이를 구해주면 된다.

단, 배열의 값이 전체 0일때와 1이 1개 있을 때를 고려해서 풀이를 해야한다.

 


전체 코드

728x90