21736번: 헌내기는 친구가 필요해

myeongrangcoding·2024년 1월 12일
0

백준

목록 보기
47/47

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

풀이

#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <queue>

using namespace std;
int N, M, Sum;
int Campus[600][600];
queue<pair<int, int>> Data;

int DirI[4]{-1, 0, 1, 0};
int DirJ[4]{0, 1, 0, -1};

void BFS()
{
    while (!Data.empty())
    {
        int CurI = Data.front().first;
        int CurJ = Data.front().second;

        Data.pop();

        for (int k = 0; k < 4; ++k)
        {
            int CheckI = CurI + DirI[k];
            int CheckJ = CurJ + DirJ[k];

            if (CheckI < 0 || CheckJ < 0 || CheckI >= N || CheckJ >= M)continue;
            if (Campus[CheckI][CheckJ] == 'X') continue;
            if (Campus[CheckI][CheckJ] == 'P') Sum++;

            Campus[CheckI][CheckJ] = 'X';
            Data.push(make_pair(CheckI, CheckJ));
        }
    }
}

int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    //freopen("input.txt", "rt", stdin);

    cin >> N >> M;

    for (int i = 0; i < N; ++i)
    {
        string Str;
        cin >> Str;

        for (int j = 0; j < M; ++j)
        {
            Campus[i][j] = Str[j];
            if (Str[j] == 'I')
            {
                Data.push(make_pair(i, j));
            }
        }
    }

    BFS();

    if (Sum > 0) cout << Sum;
    else cout << "TT";

    return 0;
}
profile
명랑코딩!

0개의 댓글