로직의 시간복잡도는 형태로 수렴하고 이는 인 최악의 경우에도 무난히 제한 조건 1초를 통과한다.
import static java.lang.Integer.parseInt;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int M = parseInt(st.nextToken());
int N = parseInt(st.nextToken());
int[][] ground = new int[M + 1][N + 1];
int[][] dp = new int[M + 1][N + 1];
for (int r = 1; r <= M; r++) {
st = new StringTokenizer(br.readLine());
for (int c = 1; c <= N; c++) {
ground[r][c] = parseInt(st.nextToken());
}
}
int maxValue = 0;
for (int r = 1; r <= M; r++) {
for (int c = 1; c <= N; c++) {
if (ground[r][c] != 0) {
continue;
}
dp[r][c] = Math.min(dp[r - 1][c - 1], Math.min(dp[r - 1][c], dp[r][c - 1])) + 1;
maxValue = Math.max(maxValue, dp[r][c]);
}
}
System.out.println(maxValue);
br.close();
}
}