[boj][c++] 3184 양

ppparkta·2022년 8월 27일
1

Problem solving

목록 보기
32/65

3184 양


이전에 풀었던 문제와 비슷한 유형으로 파싱하면 되는 문제였다. 탭으로 풀었는데 배터리가 애매해서 임시저장

양과 늑대의 수를 구해야 하는데 조건이 제대로 처리가 안된건지 늑대부분 출력이 이상함
수정필요

#include <iostream>
#include <queue>
#include <string>
using namespace std;

int r,c,yang,nk;
bool swc;
string s;
int dx[4]={1,-1,0,0};
int dy[4]={0,0,1,-1};
char graph[251][251];
bool visit[251][251];

//양이 더 많으면 스위치 0, 늑대가 더 많으면 스위치 1
int bfs(int y,int x)
{
	int o,v,ans;
	o=0;
	v=0;
	queue<pair<int,int>> q;
	q.push({y,x});
	if(graph[y][x]=='o')
		o++;
	else if(graph[y][x]=='v')
		v++;
	visit[y][x]=1;
	while(!q.empty())
	{
		int sy=q.front().first;
		int sx=q.front().second;
		q.pop();
		if(graph[sy][sx]=='o')
			o++;
		else if(graph[sy][sx]=='v')
			v++;
		for(int i=0;i<4;i++)
		{
			int ny=sy+dy[i];
			int nx=sx+dx[i];
			if((ny<r&&ny>=0)&&(nx<c&&nx>=0)&&visit[ny][nx]==false&&graph[ny][nx]!='#')
			{
				q.push({ny,nx});
				visit[ny][nx]=true;
			}
		}
	}
	if(o>v)
		swc=false;
	else
		swc=true;
	ans=max(o,v);
	return(ans);
}

int main()
{
	ios::sync_with_stdio(0);
	cin.tie(0);
	
	cin>>r>>c;
	for(int i=0;i<r;i++)//문자열패싱
	{
		cin>>s;
		for(int j=0;j<c;j++)
		{
			graph[i][j]=s[j];
		}
	}
	for(int i=0;i<r;i++)
	{
		for(int j=0;j<c;j++)
		{
			if(visit[i][j]==false&&graph[i][j]!='#')
			{
				int temp=bfs(i,j);
				if(swc==false)
					yang+=temp;
				else
					nk+=temp;
			}
		}
	}
	cout<<yang<<" "<<nk<<endl;
	return 0;
}
profile
겉촉속촉

0개의 댓글