//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 << " "; |
} |
'알고리즘 문제 풀이 > 1DP_과제(~180615)' 카테고리의 다른 글
180131_2293_동전1 (0) | 2018.01.31 |
---|---|
180131_2644_촌수계산 (0) | 2018.01.31 |
180129_14888_연산자 끼워넣기 (0) | 2018.01.29 |
180127_2309_일곱 난쟁이 (0) | 2018.01.27 |
180126_1065_한수 (0) | 2018.01.26 |
//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 << " "; |
} |
'알고리즘 문제 풀이 > 1DP_과제(~180615)' 카테고리의 다른 글
180131_2293_동전1 (0) | 2018.01.31 |
---|---|
180131_2644_촌수계산 (0) | 2018.01.31 |
180129_14888_연산자 끼워넣기 (0) | 2018.01.29 |
180127_2309_일곱 난쟁이 (0) | 2018.01.27 |
180126_1065_한수 (0) | 2018.01.26 |