[Programmers]-가장 큰 정사각형 찾기

문제

문제

0과1로 된 배열중에서 가장 큰 넓이가 되는 정사각형의 넓이를 반환해라.

코드

class Solution
{
    int max = 0;
    public int solution(int [][]board)
    {
        int answer;
        int m = board.length;
        int n = board[0].length;//m X n

        for(int i=1;i<m;i++){
            for(int j=1;j<n;j++){
                if(board[i][j]==0) continue;
                getMaxValue(board, i, j);
            }
        }
        
        if(m ==1|| n ==1) return 1;
        return max*max;
    }
    public void getMaxValue(int[][] board, int i, int j){

        int up = board[i-1][j];
        int left_up = board[i-1][j-1];
        
        int min = board[i][j-1];//left
        if(min > up) min = up;
        if(min > left_up) min = left_up;
        board[i][j] = ++min;
        
        if(max < min) max = min;
    }
}

코드 설명

[1,1]부터 시작한다.

그리고 현 위치 기준으로 왼,위,왼쪽위의 값 중에서 최소값을 구한다.

max는 가장큰 정사각형의 한변 길이이다.

min은 왼, 위, 왼쪽위의 값 중 최소값이다.

현 위치에 min+1을 넣어준다.

max이 min보다 작으면 max에 min을 넣어준다.

위의 설명은 현위치의 값이 0이 아닐경우에만 해당한다.

요약

  • 좀더 쉽게 구해보기.