๐ 1915 ๋ฌธ์
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๊ฐ์ ์ซ์๋ก ๋ฐฐ์ด์ด ์ฃผ์ด์ง๋ค.
์ถ๋ ฅ
์ฒซ์งธ ์ค์ ๊ฐ์ฅ ํฐ ์ ์ฌ๊ฐํ์ ๋์ด๋ฅผ ์ถ๋ ฅํ๋ค.
๐ง ํ์ด
๋์ ํ๋ก๊ทธ๋๋ฐ์ ์ด์ฉํ์ฌ ํ์๋ค.
import sys
input = sys.stdin.readline
n, m = map(int, input().split())
arr = []
dp = [[0] * m for _ in range(n)]
for _ in range(n):
arr.append(list(map(int, list(input().rstrip()))))
answer = 0
for i in range(n):
for j in range(m):
if i == 0 or j == 0:
dp[i][j] = arr[i][j]
elif arr[i][j] == 0:
dp[i][j] = 0
else:
dp[i][j] = min(dp[i - 1][j - 1], dp[i - 1][j], dp[i][j - 1]) + 1
answer = max(dp[i][j], answer)
print(answer * answer)
728x90