|
| //https://www.acmicpc.net/problem/10026
#include <iostream> |
| #include <cstring> |
| using namespace std; |
| char picture[100][100]; |
| bool visit[100][100]; |
| bool visitbi[100][100]; |
| int n, cnt; |
| int dy[4]={1,-1,0,0}; |
| int dx[4]={0,0,-1,1}; |
|
|
| void dfs(int y, int x, char c) |
| { |
| visit[y][x]=1; |
| for(int i=0; i<4; i++) |
| { |
| int ny=y+dy[i]; |
| int nx=x+dx[i]; |
|
|
| if(ny>=0 && ny<n && nx>=0 && nx<n && !visit[ny][nx] && c==picture[ny][nx]) |
| { |
| dfs(ny,nx,c); |
| } |
| } |
| } |
|
|
| void dfsbi(int y, int x, char c) |
| { |
| visitbi[y][x]=1; |
| for(int i=0; i<4; i++) |
| { |
| int ny=y+dy[i]; |
| int nx=x+dx[i]; |
|
|
| if(ny>=0 && ny<n && nx>=0 && nx<n && !visitbi[ny][nx]) |
| { |
| if(c=='B' && picture[ny][nx]=='B') |
| dfsbi(ny,nx,c); |
| else if(c=='R' || c=='G') |
| { |
| if(picture[ny][nx]=='R'|| picture[ny][nx]=='G') |
| dfsbi(ny,nx,c); |
| } |
| } |
| } |
| } |
|
|
| int main() |
| { |
| cin >> n; |
|
|
| //input |
| for(int i=0; i<n; i++) |
| cin >> picture[i]; |
|
|
| for(int i=0; i<n; i++) |
| for(int j=0; j<n; j++) |
| { |
| if(!visit[i][j]) |
| { cnt++; dfs(i,j, picture[i][j]); } |
| } |
| cout << cnt << " "; |
|
|
| cnt=0; |
| for(int i=0; i<n; i++) |
| for(int j=0; j<n; j++) |
| { |
| if(!visitbi[i][j]) |
| { cnt++; dfsbi(i,j, picture[i][j]); } |
| } |
| cout << cnt << " "; |
| } |