https://www.acmicpc.net/problem/14925
풀이
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <string>
#include <vector>
using namespace std;
int Ground[1000][1000];
int Dp[1000][1000];
int DirR[3]{-1, -1, 0};
int DirC[3]{0, -1, -1};
int main() {
int M{}, N{};
cin >> M >> N;
for (int i{}; i < M; ++i)
{
for (int j{}; j < N; ++j)
{
cin >> Ground[i][j];
if (0 == Ground[i][j])
{
Dp[i][j] = 1;
}
else
{
Dp[i][j] = 0;
}
}
}
for (int i{}; i < M; ++i)
{
for (int j{}; j < N; ++j)
{
if (1 == Dp[i][j])
{
int Minimum{ 2147000000 };
for (int k{}; k < 3; ++k)
{
int CheckR = i + DirR[k];
int CheckC = j + DirC[k];
if (0 > CheckR || 0 > CheckC || M <= CheckR || N <= CheckC
|| 0 < Ground[CheckR][CheckC])
{
Dp[i][j] = 1;
break;
}
Minimum = min(Minimum, Dp[CheckR][CheckC]);
Dp[i][j] = Minimum + 1;
}
}
}
}
int Maximum{};
for (int i{}; i < M; ++i)
{
for (int j{}; j < N; ++j)
{
Maximum = max(Maximum, Dp[i][j]);
}
}
cout << Maximum;
return 0;
}