[프로그래머스] 가장 큰 정사각형Lv.2
나의 풀이
def solution(board):
answer = 0
for i in range(1, len(board)):
for j in range(1, len(board[i])):
if board[i][j] != 0:
board[i][j] += min(min(board[i - 1][j - 1], board[i - 1][j]), board[i][j - 1])
for i in board:
if answer < max(i):
answer = max(i)
return answer ** 2


- 현재 위치의 값이 0이 아니면서 대각선, 왼쪽, 위쪽이 0이 아니라면 대각선, 왼쪽, 위쪽 의 값 중 가장 작은 값을 현재 위치의 값에 더해준다. 행과 열의 0인덱스는 대각선, 왼쪽, 위쪽을 전부 계산할 수 없기에 1행 1열 부터 시작한다.
- 왼쪽, 대각선, 위쪽이 모두 1 이상이라면, 해당 값 중 가장 작은 값을 더해나간다.
- 이렇게 반복하다보면 이어지는 변의 길이를 갖게 된다.
- 이 중에서 가장 긴 변을 찾아서 넓이를 구해주면 된다.