def is_square(i, j, h, board):
for r in range(i, i+h):
for c in range(j, j+h):
if r >= len(board) or c >= len(board[0]) or board[r][c] == 0:
return False
return True
def square_exist(mid, board):
for i in range(len(board)):
for j in range(len(board[0])):
if is_square(i, j, mid, board):
return mid * mid
def solution(board):
left, right = 1, min(len(board), len(board[0]))
answer = 0
while left <= right:
mid = (left + right) // 2
if square_exist(mid, board):
answer = mid
left = mid + 1
else:
right = mid - 1
return answer**2
기본적으로 가장 큰 h가 무엇일지 이중탐색으로 찾아간다. 이중 탐색으로 찾을 때, h에 대해 좌표 기준점을 옮겨 다니면서 만족하는 크기가 있으면 true를 리턴하는 방식이다. 하지만 이것은 for문이 5중 for문이다.
answer = 0
for i in range(1, len(board)) :
for j in range(1, len(board[0])) :
if board[i][j] >= 1 :
board[i][j] += min(board[i-1][j-1],board[i][j-1],board[i-1][j])
for i in board :
if answer < max(i) : answer = max(i)
return answer * answer