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);
}
}