본문 바로가기
Beakjoon&프로그래머스/파이썬

[백준/파이썬] 1915번 가장 큰 정사각형

by 현장 2025. 1. 24.

-Code

n, m = map(int, input().split())
arr = [list(map(int, input())) for _ in range(n)]
dp = [[0] * m for _ in range(n)]
res = 0

for i in range(n):
    for j in range(m):
        if arr[i][j] == 1:
            if i > 0 and j > 0:
                dp[i][j] = min(dp[i-1][j], dp[i][j-1], dp[i-1][j-1]) + 1
            else:
                dp[i][j] = 1
            res = max(res, dp[i][j])

print(res ** 2)

dp를 (x - 1, y), (x, y - 1), (x - 1, y - 1)가 모두 1 이상인 경우 계산해서 작성해야 하는 것을 알게되고 해결을 해보았으나 if문의 문제로 여러번 틀려서 바뀌서 해결을 했습니다.