알고리즘 공부

백준 가장 큰 정사각형

컴퓨터과학 2023. 11. 21. 22:18

https://www.acmicpc.net/problem/1915

 

1915번: 가장 큰 정사각형

첫째 줄에 n, m(1 ≤ n, m ≤ 1,000)이 주어진다. 다음 n개의 줄에는 m개의 숫자로 배열이 주어진다.

www.acmicpc.net

자바로 풀었습니다. dp 문제이고 사실상 암기 문제? ㅋㅋ 가장 큰 정사각형을 찾는 공식입니다 . 뭔가 dp는 갈수록 공식문제 같네요.

dp[i][j]= Math.min(dp[i-1][j], dp[i][j-1],dp[i-1][j-1])+1;

 

import java.util.*;

import java.lang.*;
import java.io.*;
public class Main {
    public static void main(String[] args) throws Exception {
        Scanner scan=new Scanner(System.in);
        int n = scan.nextInt();
        int m = scan.nextInt();
        int [][]maps=new int[n][m];
        scan.nextLine();
        for(int i=0;i<n;i++){
            String tmp=scan.nextLine();
            for(int j=0;j<tmp.length();j++){
                maps[i][j]=tmp.charAt(j)-'0';
            }
        }

        int [][]dp=new int[n][m];
        int gcnt=0;
        for(int i=0;i<n;i++){
            for(int j=0;j<m;j++){
                if(maps[i][j]==1){
                    if(i==0||j==0){
                        dp[i][j]=1;
                    }else{
                        dp[i][j]=Math.min(Math.min(dp[i-1][j],dp[i][j-1]),dp[i-1][j-1])+1;
                    }
                
                }
                gcnt=Math.max(gcnt,dp[i][j]);
            }
        }

        System.out.print(gcnt*gcnt);
    }
}