가장 큰 정사각형
Updated:
- DP의 규칙을 찾아내는 과정이 어렵다
- 규칙을 생각해내면 허무한 문제
import sys
n, m = map(int,sys.stdin.readline().split())
arr = []
for i in range(n):
arr.append(sys.stdin.readline())
re = [[0 for i in range(m)] for j in range(n)]
max_num = 0
for i in range(n):
for j in range(m):
if arr[i][j] == '0':
# 0일 때는 제외
continue
if i - 1 < 0 or j - 1 < 0:
# 왼쪽과 윗면에 접하면 1값을 준다
re[i][j] = 1
max_num = max(re[i][j], max_num)
else:
# 위, 왼쪽, 위왼쪽대각선만 확인한다
# 계속해서 갱신된 값들의 min값에 1을 더해준다
re[i][j] = min(re[i-1][j-1], re[i-1][j], re[i][j-1])+1
max_num = max(re[i][j], max_num)
print(max_num**2)
문제
n×m의 0, 1로 된 배열이 있다. 이 배열에서 1로 된 가장 큰 정사각형의 크기를 구하는 프로그램을 작성하시오.
0 1 0 0
0 1 1 1
1 1 1 0
0 0 1 0
위와 같은 예제에서는 가운데의 2×2 배열이 가장 큰 정사각형이다.
입력
첫째 줄에 n, m(1 ≤ n, m ≤ 1,000)이 주어진다. 다음 n개의 줄에는 m개의 숫자로 배열이 주어진다.
출력
첫째 줄에 가장 큰 정사각형의 넓이를 출력한다.
예제 입력 1
4 4
0100
0111
1110
0010
예제 출력 1
4
Leave a comment