[알고리즘] 프로그래머스 - 가장 큰 정사각형 찾기

June·2021년 3월 4일
0

알고리즘

목록 보기
112/260
post-custom-banner

프로그래머스 - 가장 큰 정사각형 찾기

통과하지 못한 내 풀이

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


출처: https://soobarkbar.tistory.com/164

post-custom-banner

0개의 댓글