akjfal

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

알고리즘/programmers

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

akjfal 2021. 6. 22. 17:57
class Solution
{
    int[][] board;
    int[][] check;
    int row, column, answer;
    public int solution(int [][]board)
    {
        this.board = board;
        answer = 0;
        row = board.length;
        column = board[0].length;
        check = new int[row][column];
        refreshSquare();
        checkSquare();
        answer = answer * answer;
        return answer;
    }

    void refreshSquare(){
        for(int i = 0; i < row; i++){
            int point = 0;
            for(int j = column-1; j > -1; j--){
                if(board[i][j] == 1){
                    point += 1;
                    check[i][j] = point;
                }else{
                    point = 0;
                }
            }
        }
    }

    void checkSquare(){
        for(int i = 0; i < row; i++){
            for(int j = 0; j < column; j++){
                int num = check[i][j];
                if(num > answer){
                    for(int k = i; k < i + num; k++){
                        if(num < answer)
                            break;
                        if(k == row){
                            num = k - i;
                            break;
                        }
                        if(check[k][j] < num){
                            num = check[k][j];
                        }
                    }
                    if(answer < num){
                        answer = num;                        
                    }
                }
            }
            if(row - i < answer)
                break;
        }
    }

}

 

class Solution
{
    public int solution(int [][]board)
    {
        int answer = 0;
        int row = board.length;
        int column = board[0].length;
        for(int i = 1; i < row; i++){
            for(int j = 1; j < column; j++){
                if(board[i][j] == 1)
                    board[i][j] = Math.min(Math.min(board[i-1][j], board[i][j-1]), board[i-1][j-1])+1;
            }
        }
        
        for(int i = 0; i < row; i++){
            for(int j = 0; j < column; j++){
                if(answer < board[i][j])
                    answer = board[i][j];
            }
        }
        answer = answer * answer;
        return answer;
    }
}

 

몇주전에 풀었던 거리 기억이 잘 안난다... 나중에 다시풀어보면 설명올리겠다.

'알고리즘 > programmers' 카테고리의 다른 글

[Programmer] [3차] 압축  (0) 2021.06.23
[Programmers] [3차] 방금 그곡  (0) 2021.06.22
[Programmers] 방문 길이  (0) 2021.06.22
[Programmers] 점프와 순간 이동  (0) 2021.06.20
[Programmers] [1차] 캐시  (0) 2021.06.19
Comments