코딩테스트 연습 - 가장 큰 정사각형 찾기 | 프로그래머스 스쿨

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

1과 0으로 이루어진 2차원 배열 board에서 1로 이루어진 가장 큰 정사각형을 찾아 넓이를 반환

먼저 떠오르는 방식은 완전 탐색이다. 모든 가능한 정사각형의 크기를 다 확인하는 것이다. 하지만 이는 시간복잡도 O(n^2m^2)으로 비효율적이다.

따라서 dp를 생각해 보자.

dp[i][j]에서의 최대 정사각형의 크기는 어떻게 판단할까?

dp[i][j]에서의 최대 정사각형은 min(dp[i-1][j], dp[i-1][j-1], dp[i][j-1]) + 1이 된다.

import java.util.*;

class Solution
{
    public int solution(int [][]board)
    {
        for (int i = 1; i < board.length; i++) {
            for (int j = 1; j < board[i].length; j++) {
                if (board[i][j] == 1) {
                    board[i][j] += Math.min(board[i - 1][j], Math.min(board[i][j - 1], board[i - 1][j - 1]));
                }
            }
        }
        
        int x = Arrays.stream(board).flatMapToInt(Arrays::stream).max().getAsInt();

        return x * x;
    }
}

'Algorithm > Programmers' 카테고리의 다른 글

Programmers 42897 - 도둑질  (0) 2024.10.30
BOJ 2295 - 세 수의 합  (0) 2024.10.26
Programmers 132265 - 롤케이크 자르지  (1) 2024.10.24
Programmers 42577 - 전화번호 목록  (0) 2024.10.24
Programmers 62050 - 지형 이동  (0) 2024.10.23

+ Recent posts