μκ³ λ¦¬μ¦/DP
[Python] λ°±μ€ 1915 κ°μ₯ ν° μ μ¬κ°ν
JayAlex07
2023. 3. 30. 10:42
π§π» [Python] λ°±μ€ 1915 κ°μ₯ ν° μ μ¬κ°ν
Gold 4 - DP
μΈλ±μ€κ° λ²μ΄λμ§ μλ μ μμ, μ, μΌμͺ½, μΈμͺ½ μμ μ«μλ€ μ€ min κ°μ ꡬν λ€μμ 1μ λν΄μ€λ€
μ½λ
N, M = map(int, input().split())
matrix = [list(map(int, input())) for _ in range(N)]
dp_table = [[0] * M for _ in range(N)]
for i in range(N):
for j in range(M):
if matrix[i][j] == 1:
dp_table[i][j] = 1
if 0 <= i - 1 and 0 <= j - 1:
dp_table[i][j] = min(dp_table[i - 1][j], dp_table[i - 1][j - 1], dp_table[i][j - 1]) + 1
result = 0
for d in dp_table:
result = max(result, max(d))
print(result ** 2)
μκ° μ΄κ³Όκ° λ¬λ μ½λ
- μμ νμμ κΈ°λ°μΌλ‘ νμ΄λ₯Ό νλ€. κ·Έλ¦¬κ³ μ¬μ€μ forλ¬Έμ 4λ²μ ν΄μΌ νλ€...
N, M = map(int, input().split())
def square(i, j, length):
for r in range(i, length + i):
for c in range(j, length + j):
if matrix[r][c] == 0:
return False
return True
matrix = [list(map(int, input())) for _ in range(N)]
l = N
flag = False
while flag == False:
for i in range(N):
if flag == True:
break
for j in range(M):
if i + l <= N and j + l <= M:
flag = square(i, j, l)
if flag == True:
break
else:
break
l -= 1
print((l + 1) ** 2)