Algorithm/BAEKJOON
[C#]백준 10026 적록색약
zz0zz9
2025. 6. 29. 23:17
반응형
반응형
https://www.acmicpc.net/problem/10026
문제 요약
비적록색약인이 봤을 때 구역의 개수와 적록색약(R==G)이 봤을 때 구역의 개수 각각 출력하기
풀이(BFS)
int n=int.Parse(Console.ReadLine());
var b=new char[n][]; //b:입력된 문자열을 문자 배열로 저장
int[] dx={-1,1,0,0},dy={0,0,-1,1};
Queue<(int,int)>q=new();
for(int i=0;i<n;)b[i++]=Console.ReadLine().ToCharArray();
for(int i=0;i++<2;) //일반인이 봤을 때(1), 적록색약이 봤을 때(2) 두 번으로 순회
{
var v=new int[n,n]; //v:해당 좌표 방문 여부. 방문하면 1로 변경
int c=0; //c:카운트
for(int j=0;j<n;j++)for(int k=0;k<n;k++) //모든 문자 순회
{
if(v[j,k]==0) //v에 방문하지 않았다면
{
c++;
q.Enqueue((j,k)); //해당 좌표 q에 추가
v[j,k]=1; //해당 좌표 방문으로 변경
var p=b[j][k]; //지금 좌표의 색깔 저장
while(q.Count>0)
{
var(x,y)=q.Dequeue(); //현재 q가 가지고 있는 좌표 저장
for(int d=0;d<4;d++) //4방향 탐색
{
int nx=x+dx[d],ny=y+dy[d];
if(0<=nx&&nx<n&&0<=ny&&ny<n&&v[nx,ny]==0)
{
var h=b[nx][ny];
if (i==1?h==p:(p=='B')==(h=='B')) //일반인이 봤을때 h랑 p가 같을때만, 적록색약이 봤을때 p랑 h가 둘다 B일때만
{
v[nx,ny]=1;
q.Enqueue((nx,ny));
}
}
}
}
}
}
Console.Write(c+" ");
}
길어
반응형