14925번: 목장 건설하기

myeongrangcoding·2023년 12월 20일
0

백준

목록 보기
36/47

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() {

    //freopen("input.txt", "rt", stdin);

    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;
}
profile
명랑코딩!

0개의 댓글