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+" ");
}

길어

반응형