# 3187. ์–‘์น˜๊ธฐ ๊ฟ
Study Repository

3187. ์–‘์น˜๊ธฐ ๊ฟ

by rlaehddnd0422

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

 

3187๋ฒˆ: ์–‘์น˜๊ธฐ ๊ฟ

์ž…๋ ฅ์˜ ์ฒซ ๋ฒˆ์งธ ์ค„์—๋Š” ๊ฐ๊ฐ ์˜์—ญ์˜ ์„ธ๋กœ์™€ ๊ฐ€๋กœ์˜ ๊ธธ์ด๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๋‘ ๊ฐœ์˜ ์ •์ˆ˜ R, C (3 ≤ R, C ≤ 250)๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ๋‹ค์Œ ๊ฐ R์ค„์—๋Š” C๊ฐœ์˜ ๋ฌธ์ž๊ฐ€ ์ฃผ์–ด์ง€๋ฉฐ ์ด๋“ค์€ ์œ„์—์„œ ์„ค๋ช…ํ•œ ๊ธฐํ˜ธ๋“ค์ด๋‹ค.

www.acmicpc.net

 

์š”์ 

1. ์šธํƒ€๋ฆฌ๋Š” #, ์–‘์€ k, ๋Š‘๋Œ€๋Š” v

2. ์šธํƒ€๋ฆฌ ๋‚ด๋ถ€์— ์–‘์˜ ์ˆ˜๊ฐ€ ๋Š‘๋Œ€์˜ ์ˆ˜๋ณด๋‹ค ๋งŽ์œผ๋ฉด ๋Š‘๋Œ€๊ฐ€ ๋ชจ๋‘ ์žก์•„๋จนํžŒ๋‹ค.

3. ์šธํƒ€๋ฆฌ ๋‚ด๋ถ€์— ๋Š‘๋Œ€์˜ ์ˆ˜๊ฐ€ ์–‘์˜ ์ˆ˜๋ณด๋‹ค ๋งŽ์œผ๋ฉด ์–‘์ด ๋ชจ๋‘ ์žก์•„๋จนํžŒ๋‹ค.

 

Solution

1. ์˜์—ญ๋ณ„๋กœ ์‚ดํŽด๋ณด๊ธฐ ์œ„ํ•ด ๋ฐฐ์—ด๊ฐ’์ด #์ด ์•„๋‹Œ๊ฒฝ์šฐ bfs๋ฅผ ํ•ด์„œ ์–‘์˜ ์ˆ˜์™€ ๋Š‘๋Œ€ ์ˆ˜๋ฅผ ๊ณ„์‚ฐํ•œ๋‹ค.

 

2. ์˜์—ญ ๋‚ด๋ถ€๊ฐ’๋งŒ BFS๋กœ ์‚ดํŽด๋ณด๊ณ , ๋‚ด๋ถ€๊ฐ’์ด v๋ฉด wolf๋ฅผ ๋”ํ•ด์ฃผ๊ณ  k๋ฉด sheep์„ ๋”ํ•ด์ค€๋‹ค.

 

3. BFS๋ฅผ ํ†ตํ•ด ์˜์—ญ์„ ๋ชจ๋‘ ์‚ดํŽด๋ณธ ํ›„, ๋Š‘๋Œ€๊ฐ€ ๋งŽ์œผ๋ฉด ์–‘์ด ๋ชจ๋‘ ์žก์•„๋จนํžˆ๋‹ˆ ansW์— ๋Š‘๋Œ€ ์ˆ˜(wolf)๋ฅผ ๋”ํ•ด์ฃผ๊ณ  ์–‘์ด ๋งŽ์œผ๋ฉด ๋Š‘๋Œ€๊ฐ€ ๋ชจ๋‘ ์žก์•„๋จนํžˆ๋‹ˆ ansS์— ์–‘์˜ ์ˆ˜(sheep)๋ฅผ ๋”ํ•ด์ค€๋‹ค.

 

 

์†Œ์Šค ์ฝ”๋“œ

#include <iostream>
#include <vector>
#include <algorithm>
#include <utility>
#include <queue>
#define FASTio ios_base :: sync_with_stdio(false), cin.tie(NULL), cout.tie(NULL)
#define endl '\n' 

using namespace std;
int n,m;
vector<vector<char>> area(250,vector<char>(250));
vector<vector<bool>> check(250,vector<bool>(250));

int dy[]={-1,1,0,0};
int dx[]={0,0,1,-1};
int ansS =0;
int ansW =0;


void bfs(int y,int x)
{   
    int sheep = 0;
    int wolf = 0;
    queue<pair<int,int>> q;

    q.push(make_pair(y,x));
    check[y][x]=true;

    if(area[y][x]=='v') wolf++;
    else if(area[y][x]=='k') sheep++;


    while(!q.empty())
    {
        int y = q.front().first;
        int x = q.front().second;

        q.pop();

        for(int i=0;i<4;i++)
        {
            int ny = y + dy[i];
            int nx = x + dx[i];
            
            if(ny>=0 && nx>=0 && ny<n && nx<m && area[ny][nx]!='#')
            {
                if(check[ny][nx]==false)
                {
                    if(area[ny][nx]=='v')
                    {
                        wolf++;
                        check[ny][nx] = true;
                        q.push(make_pair(ny,nx));
                    }

                    else if(area[ny][nx]=='k')
                    {
                        sheep++;
                        check[ny][nx] = true;
                        q.push(make_pair(ny,nx));
                    }
                    else if(area[ny][nx]=='.')
                    {
                        check[ny][nx] = true;
                        q.push(make_pair(ny,nx));
                    }

                }
            }
        }
    }

    if(sheep>wolf)
    {
        wolf = 0;
    }
    else
    {
        sheep = 0;
    }

    ansS += sheep;
    ansW += wolf;

}
int main()
{
    FASTio;
    cin >> n >> m;

    for(int i=0;i<n;i++)
    {
        for(int j=0;j<m;j++)
        {
            cin >> area[i][j];
        }
    }

    for(int i=0;i<n;i++)
    {
        for(int j=0;j<m;j++)
        {    
            if(area[i][j]!='#' && check[i][j]==false)
            {
                bfs(i,j);
            }
        }
    }

    cout << ansS << ' ' << ansW;
    return 0;
}

 

๋ธ”๋กœ๊ทธ์˜ ์ •๋ณด

Study Repository

rlaehddnd0422

ํ™œ๋™ํ•˜๊ธฐ