알고리즘/프로그래머스 level 1,2

[파이썬🐍] 프로그래머스 : 가장 큰 정사각형 찾기

코딩개미뚠뚠 2021. 5. 21. 18:34
반응형

 

def solution(board):
    answer = 0
    for i in range(len(board)):
        for j in range(len(board[0])):
            if (i > 0) and (j > 0) and (board[i][j] != 0):
                board[i][j] = min(board[i][j-1], board[i-1][j], board[i-1][j-1])+1
            answer = max(answer, board[i][j])
    return answer ** 2

처음엔 이 방법을 생각하기 어려워서 한참 고민하다가 서치를 통해 다른 사람의 풀이를 보고 해결한 것이다.

 

풀이를 보고도 이해가 잘 안되어서 직접 손으로 그려보기도 했다.

일단 먼저 생각해야 할 것이 정사각형이 되기 위한 조건이다.

왼쪽 윗대각선 , 왼쪽, 위 이렇게 세방향을 검사해주고 거기서 min+1값을 구하는 것이다.

왜 min값이어야 하는 가? min값으로 해야지 그 위치에서 만들 수 있는 최대 정사각형을 구할 수 있다.

그려보면 더 감이 올 것이다. 

 

말로 표현하기는 어렵지만 그려보는 것이 이해에 제일 도움이 되는 것 같다. 화이팅

반응형