반응형
[ 백준 3184번 - 양 소스 코드 ]
#include<iostream>
#include<queue>
using namespace std;
int main()
{
int i,j;
int c,r,x,y,sheep_cnt=0,wolf_cnt=0;
char maps[250][250];
bool check[250][250]={false,};
queue<pair<int,int> > pnt;
cin>>r>>c;
for(i=0;i<r;i++)
{
for(j=0;j<c;j++) cin>>maps[i][j];
}
for(i=0;i<r;i++)
{
for(j=0;j<c;j++)
{
if(check[i][j]==false&&(maps[i][j]=='.'||maps[i][j]=='o'||maps[i][j]=='v'))
{
int sc=0,wc=0;
if(maps[i][j]=='o') sc++;
else if(maps[i][j]=='v') wc++;
pnt.push(make_pair(i,j));
check[i][j]=true;
while(1)
{
if(pnt.size()==0) break;
x=pnt.front().first;
y=pnt.front().second;
pnt.pop();
if(x-1>=0&&check[x-1][y]==false&&maps[x-1][y]!='#')
{
if(maps[x-1][y]=='o') sc++;
else if(maps[x-1][y]=='v') wc++;
pnt.push(make_pair(x-1,y));
check[x-1][y]=true;
}
if(x+1<r&&check[x+1][y]==false&&maps[x+1][y]!='#')
{
if(maps[x+1][y]=='o') sc++;
else if(maps[x+1][y]=='v') wc++;
pnt.push(make_pair(x+1,y));
check[x+1][y]=true;
}
if(y-1>=0&&check[x][y-1]==false&&maps[x][y-1]!='#')
{
if(maps[x][y-1]=='o') sc++;
else if(maps[x][y-1]=='v') wc++;
pnt.push(make_pair(x,y-1));
check[x][y-1]=true;
}
if(y+1<c&&check[x][y+1]==false&&maps[x][y+1]!='#')
{
if(maps[x][y+1]=='o') sc++;
else if(maps[x][y+1]=='v') wc++;
pnt.push(make_pair(x,y+1));
check[x][y+1]=true;
}
}
if(sc>wc) wc=0;
else if(sc<=wc) sc=0;
sheep_cnt+=sc;
wolf_cnt+=wc;
}
}
}
cout<<sheep_cnt<<' '<<wolf_cnt;
return 0;
}
반응형
'백준 문제풀이' 카테고리의 다른 글
백준 19939번 - 박 터뜨리기 (0) | 2021.03.27 |
---|---|
백준 17386번 - 선분 교차1 소스 코드 (0) | 2021.03.20 |
백준 16948번 - 데스 나이트 소스 코드 (0) | 2021.03.07 |
백준 1260번 DFS와 BFS (0) | 2021.03.03 |
백준 1916번 - 최소비용 구하기 소스 코드 - 우선순위 큐 (0) | 2021.02.22 |