처음에 좌표를 한 칸씩 이동하면서 backtracking 방식으로 풀어보려 하였으나, row와 column의 크기가 1000이하인 관계로 TLE가 떴다
dp를 이용해서 풀어주었다
아직도 dp문제가 제일 어렵다..
def solution(board):
N = len(board); M = len(board[0])
dp = [[0]*(M+1) for _ in range(N+1)]
for i in range(N):
for j in range(M):
if board[i][j] == 1:
dp[i+1][j+1] = min(dp[i][j+1], dp[i+1][j], dp[i][j]) + 1 #현재 위치에서, (상, 좌상, 좌)를 확인해보면 됨
max_width = 0
for i in range(len(dp)):
for j in range(len(dp[0])):
max_width = max(max_width, dp[i][j])
return max_width**2