Programmers - 가장 큰 정사각형 찾기

SJ0000·2022년 5월 25일
0

문제 링크

처음에 브루트포스로 풀었는데, 효율성테스트를 통과하지 못해서 계속 고민했다.
브루트 포스에서 필요 없는 경우를 가지치기 해가면서 케이스를 줄였는데도 통과하지 못했었는데
다른분이 작성한 풀이를 보고 DP로 구할 수 있다는 것을 이해했다.

d[i][j] 가 (i,j)가 우측 하단 끝점인 정사각형의 길이 일때, board[i][j]가 1이면(비어있지 않으면)
d[i][j]는 min(d[i-1][j],d[i][j-1], d[i-1][j-1])+1 이다

def solution(board):

    width = len(board[0])  # j
    height = len(board)  # i

    for i in range(1, height):
        for j in range(1, width):
            if board[i][j] == 0:
                continue
            board[i][j] = min(board[i-1][j], board[i][j-1], board[i-1][j-1])+1

    # print(board)

    max_length = 0
    for row in board:
        max_length = max(max_length, max(row))

    return max_length**2
profile
잘하고싶은사람

0개의 댓글