정말 간단하게 dfs로 풀었다.
맞왜틀 한걸 봤더니 인덱스 범위 비교할때 N을 안쓰고 100을..
// 10026 https://www.acmicpc.net/problem/10026
// dfs
#include <bits/stdc++.h>
using namespace std;
char map_[100][100];
bool jrsy[100][100];
bool notjrsy[100][100];
int N;
int dx[4] = {0,0,1,-1};
int dy[4] = {1,-1,0,0};
void dfs(int x, int y, int isJRSY){
if(isJRSY){
jrsy[x][y] = true;
for(int i = 0 ; i < 4 ; i++){
int nowx = x + dx[i];
int nowy = y + dy[i];
if(nowx < 0 || nowx >= N || nowy < 0 || nowy >= N) continue;
if(jrsy[nowx][nowy]) continue;
if(map_[x][y] == 'B'){
if(map_[nowx][nowy] != 'B') continue;
}
else {
if(map_[nowx][nowy] == 'B') continue;
}
dfs(nowx, nowy, isJRSY);
}
}
else {
notjrsy[x][y] = true;
for(int i = 0 ; i < 4 ; i++){
int nowx = x + dx[i];
int nowy = y + dy[i];
if(nowx < 0 || nowx >= N || nowy < 0 || nowy >= N) continue;
if(notjrsy[nowx][nowy]) continue;
if(map_[x][y] != map_[nowx][nowy]) continue;
dfs(nowx, nowy, isJRSY);
}
}
}
int main(){
ios_base :: sync_with_stdio(false);
cin.tie(NULL);
cin >> N;
for(int i = 0; i < N ; i++){
string a;
cin >> a;
for(int j = 0; j < N ; j++){
map_[i][j] = a[j];
}
}
int jrsy_res = 0;
int not_jrsy_res = 0;
for(int i = 0 ; i < N ; i++){
for(int j = 0 ; j < N ; j++){
if(jrsy[i][j]) continue;
dfs(i,j,true);
jrsy_res += 1;
}
}
for(int i = 0 ; i < N ; i++){
for(int j = 0 ; j < N ; j++){
if(notjrsy[i][j]) continue;
dfs(i,j,false);
not_jrsy_res += 1;
}
}
cout << not_jrsy_res << ' ' << jrsy_res << '\n';
return 0;
}
'백준 > 클래스' 카테고리의 다른 글
[7] [Class 3] - 백준 11727 2xn 타일링 2 (0) | 2021.01.23 |
---|---|
[6] [Class 3] - 백준 11724 연결 요소의 개수 (0) | 2021.01.23 |
[4] [Class 3] - 백준 9019 DSLR (0) | 2021.01.22 |
[3] [Class 3] - 백준 7662 이중 우선순위 큐 (0) | 2021.01.22 |
[2] [Class 3] - 백준 1697 숨바꼭질 (0) | 2021.01.21 |
댓글