1N, M = map(int, input().split())
2
3L = [list(map(int, input())) for _ in range(N)]
4
5dp = [[0]*(M+1) for _ in range(N+1)]
6
7result = 0
8
9for i in range(1, N+1):
10 for j in range(1, M+1):
11 dp[i][j] = L[i-1][j-1]
12
13 if L[i-1][j-1]:
14 dp[i][j] = min(dp[i-1][j], dp[i][j-1], dp[i-1][j-1])+1
15 result = max(result, dp[i][j])
16
17for i in dp:
18 print (i)
19print (result**2)
- 조금 시간이 걸렸지만 혼자 힘으로 풀었다
- 점화식은 dp[i][j] = min(dp[i-1][j], dp[i][j-1], dp[i-1][j-1])+1이다.
- 모두 0이면 0, 하나라도 1이면 1이 답이라는 것을 생각해야 한다.