์ด๋ฒ ๋ฌธ์ ๋ BOJ:2667(๋จ์ง๋ฒํธ๋ถ์ด๊ธฐ) ๋ฌธ์ ์ ์ ์ฌํ๋ค.
๊ฐ ๋ณ์ฌ graph[x][y]๋ฅผ ๊ธฐ์ค์ผ๋ก ์, ํ, ์ข, ์ฐ์ 4๊ฐ์ง ๊ฒฝ์ฐ์๋ง ์ธ์ ํ ๊ฒ์ผ๋ก ๊ฐ์ฃผํ๋ค.
x-1 y
x y-1
x y+1
x+1 y
๋ฐ๋ผ์ graph[x][y] ๊ธฐ์ค ์์ 4๊ฐ์ง ๊ฒฝ์ฐ์ ๋ํด ํด๋น ์ ์ ์ด ๋ฐฉ๋ฌธํ์ง ์์๊ณ , graph[x][y]์ ๊ฐ์ด ๊ฐ์ผ๋ฉด ๋ฐฉ๋ฌธํ๋ค. ๊ทธ๋ฆฌ๊ณ ์ธ์ ํ ๊ฒ์ผ๋ก cnt๋ฅผ ์ฆ๊ฐ์ํจ๋ค.
์ด๋ ๋ค์ ๋ฐฉ๋ฌธํ๋ graph[nx][ny]์์ nx์ ny๋ ์ ์ํฐ M x N ํฌ๊ธฐ ๋ฒ์ ๋ด์ ์๋ ๊ฒ์ ๋์์ผ๋ก ํ์ํ๋ค.
๋ง์ฝ ์ด๊ธฐ graph[x][y]์ ๋ํ ํจ์ ํธ์ถ์ด ๋๋๊ณ main ํจ์๋ก ๋ฆฌํดํ๋ฉด graph[x][y] ๊ธฐ์ค ๋ชจ๋ ์ธ์ ํ ์ ์ ๋ค์ ๋ํด ๋ฐฉ๋ฌธํ ๊ฒ์ผ๋ก, cnt์ ๋ํ ๊ฐ์ ์ ๊ณฑ์ W์ด์์ผ๋ฉด result[0]์, B์ด์์ผ๋ฉด result[1]์ ๋ํด๊ฐ๋ค.
#include <iostream>
#include <deque>
using namespace std;
int visited[100][100];
int dx[] = {-1, 0, 0, 1};
int dy[] = {0, -1, 1, 0};
void DFS(int x, int y, deque<char> *graph, int *cnt, int N, int M){
(*cnt)++;
visited[x][y] = 1;
for(int i=0; i<4; i++){
int nx = x + dx[i]; int ny = y + dy[i];
if(nx < 0 || ny < 0 || nx >= M || ny >= N) continue;
if(!visited[nx][ny] && graph[nx][ny] == graph[x][y]) DFS(nx, ny, graph, cnt, N, M);
}
}
int main(){
int N, M; // N: ๊ฐ๋ก, M: ์ธ๋ก
scanf("%d %d", &N, &M);
deque<char> graph[M];
deque<int> result;
result.push_back(0);
result.push_back(0);
for(int i=0; i<M; i++){
string str;
cin >> str;
for(char c: str) graph[i].push_back(c);
}
for(int i=0; i<M; i++){
for(int j=0; j<N; j++){
int cnt=0;
if(!visited[i][j]){
DFS(i, j, graph, &cnt, N, M);
if(graph[i][j] == 'W') result[0] += cnt*cnt;
else result[1] += cnt*cnt;
}
}
}
printf("%d %d\n", result[0], result[1]);
}
โโ ์ฃผ์ํด์ผ ํ ์ ์, ๊ฐ๋ก๊ฐ M์ด๊ณ , ์ธ๋ก๊ฐ N์ด๋ค. ์ฆ, x์ ๋ํ ๋ฒ์๊ฐ 0~M-1๊น์ง, y์ ๋ํ ๋ฒ์๊ฐ 0~N-1๊น์ง์ด๋ค.
๊ณ์ ์ค๋ต์ ๋ฐ๋๋ค๋ฉด, ์ด ๋ถ๋ถ์ ๋ค์ ํ์ธํด๋ณด์.