[프로그래머스] 가장 큰 정사각형Lv.2 - Python

[프로그래머스] 가장 큰 정사각형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 이상이라면, 해당 값 중 가장 작은 값을 더해나간다.
  • 이렇게 반복하다보면 이어지는 변의 길이를 갖게 된다.
  • 이 중에서 가장 긴 변을 찾아서 넓이를 구해주면 된다.

좋은 웹페이지 즐겨찾기