가장 큰 정사각형 1915

LJM·2023년 7월 26일
0

백준풀기

목록 보기
202/259

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

DP문제 일까 결론내리고 분류를 보니 맞았다. 근데 풀 방법은 떠오르지 않음;; GPT의 도움을 얻어서 풀었다

DP이차원 배열 만듦
왼쪽, 위쪽, 왼쪽위쪽 중에 가장 작은거 + 1을 현재 위치에 세팅


예제 샘플은 위와같은 DP이차원 배열의 값을 도출할 수 있다

점화식을 보니 대략적인 이해가 된게 정사각형이 되면 값을 누적시키는 방식이다. 2x2 가 최소단위이고 점차 커질수록 값이 누적되는방식이다

import java.io.*;
import java.util.*;

public class Main {
    public static void main(String[] args) throws IOException{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        String[] input = br.readLine().split(" ");

        int n = Integer.parseInt(input[0]);
        int m = Integer.parseInt(input[1]);

        int[][] dp = new int[n+1][m+1];
        int[][] dir = { {0, -1}, {-1, -1}, {-1, 0}};

        int answer = 0;
        for (int i = 1; i <= n; i++) {

            input = br.readLine().split("");
            for (int j = 1; j <= m; j++) {

                dp[i][j] = Integer.parseInt(input[j-1]);

                if(dp[i][j] == 0)
                    continue;

                int min = Integer.MAX_VALUE;
                for (int k = 0; k < 3; k++) {
                    int r = i + dir[k][0];
                    int c = j + dir[k][1];

                    min = Math.min(min, dp[r][c]);

                }

                dp[i][j] = min+1;
                answer = Math.max(answer, dp[i][j]);
            }
        }

        System.out.println(answer*answer);
    }
}
profile
게임개발자 백엔드개발자

0개의 댓글