#include <iostream>
#include <string>
#include <queue>
#include <algorithm>

using namespace std;
#define X first
#define Y second

string board[102];
bool vis[102][102];
bool vis1[102][102];

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

int main() {
    ios::sync_with_stdio(0);
    cin.tie(0);
    int n;
    cin >> n;
    for(int i=0; i<n; i++) {
        cin >> board[i];
    }
    

    int cnt=0;
    for(int i=0; i<n;i++) {
        for(int j=0; j<n; j++) {
            //방문함
            if(vis[i][j]==1) continue;
            //새로운 색
            
            cnt++;
            queue<pair<int,int>> q1;
            char now=board[i][j];
            vis[i][j]=1;
            q1.push({i,j});
            while(!q1.empty()) {
                pair<int,int> cur=q1.front();
                
                q1.pop();
                for(int idx=0; idx<4; idx++) {
                    int nx=cur.X+dx[idx];
                    int ny=cur.Y+dy[idx];
                    if(nx<0 || nx >=n || ny<0 || ny>=n) continue;
                    //다른색 이거나 방문됨 -> 넘김
                    if(board[nx][ny]!=now || vis[nx][ny]) continue;
                    q1.push({nx,ny});
                    vis[nx][ny]=1;
                    
                    }
            }
            
        }
    }
    for(int i=0; i<n; i++) {
        for(int j=0; j<n; j++) {
            if(board[i][j]=='R') board[i][j]='G'; 
        }
    }
    int cnt1=0;
    for(int i=0; i<n;i++) {
        for(int j=0; j<n; j++) {
            if(vis1[i][j]==1) continue;

            cnt1++;
            queue<pair<int,int>> Q;
            char now=board[i][j];
            Q.push({i,j});
            vis1[i][j]=1;
            while(!Q.empty()) {
                pair<int,int> cur=Q.front();
                Q.pop();
                for(int idx=0;idx<4;idx++) {
                    int nx=cur.X+dx[idx];
                    int ny=cur.Y+dy[idx];
                    if(nx<0 || nx >=n || ny<0 || ny>=n) continue;
                    if(board[nx][ny]!=now || vis1[nx][ny]) continue;

                    Q.push({nx,ny});
                    vis1[nx][ny]=1;
                }
            }
        }
    }
    cout << cnt << ' ' << cnt1;
}

Embed on website

To embed this project on your website, copy the following code and paste it into your website's HTML: