package baekjoon;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main_10026 {
static String[][] rgb, nrgb;
static boolean[][] visit, nvisit;
static int N;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
N = Integer.parseInt(br.readLine());
// 적록색약 X
rgb = new String[N][N];
visit = new boolean[N][N];
// 적록색약 O
nrgb = new String[N][N];
nvisit = new boolean[N][N];
for (int i = 0; i < N; i++) {
String ss = br.readLine();
int cnt = 0;
while(cnt < N) {
rgb[i][cnt] = ss.substring(cnt, cnt+1);
ss = ss.replace("G", "R");
nrgb[i][cnt] = ss.substring(cnt, cnt+1);
cnt++;
}
}
int rgbCnt = 0;
int nrbgCnt = 0;
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
if(!visit[i][j]) {
dfs(i, j, rgb, visit);
rgbCnt++;
}
if (!nvisit[i][j]) {
dfs(i, j, nrgb, nvisit);
nrbgCnt++;
}
}
}
System.out.println(rgbCnt+" "+nrbgCnt);
}
static void dfs(int i, int j, String[][] rgb, boolean[][] visit) {
if(!visit[i][j]) {
visit[i][j] = true;
String color = rgb[i][j];
// 상
if(i>0 && !visit[i-1][j] && rgb[i-1][j].equals(color)) {
dfs(i-1, j, rgb, visit);
}
// 하
if(i<(N-1) && !visit[i+1][j] && rgb[i+1][j].equals(color)) {
dfs(i+1, j, rgb, visit);
}
// 좌
if(j>0 && !visit[i][j-1] && rgb[i][j-1].equals(color)) {
dfs(i, j-1, rgb, visit);
}
// 우
if(j<(N-1) && !visit[i][j+1] && rgb[i][j+1].equals(color)) {
dfs(i, j+1, rgb, visit);
}
}
}
}
그동안 사이드 프로젝트한다고 브론즈들만 깨 부시다가
오랜만에 dfs bfs 문제 도전했는데 틀렸다 ..
테스트 케이스는 맞았는데 어디가 틀렸는지 모르겠어서 좀만 더 고민하다가 포스팅 수정해야겠다 T-T
for (int i = 0; i < N; i++) {
String ss = br.readLine();
int cnt = 0;
while(cnt < N) {
rgb[i][cnt] = ss.substring(cnt, cnt+1);
System.out.println(rgb[i][cnt]);
String ns = ss.replace("G", "R");
nrgb[i][cnt] = ns.substring(cnt, cnt+1);
cnt++;
}
}
rgb 배열을 만들어주는 부분을 바꿔주니 맞췄다
적록색약의 경우 G를 R로 바꿔주기 위해 replace 함수를 써서 nrgb에만 넣어주려고 했는데 로그 찍어보니 rgb안에도 G가 R로 바뀌어있었다.
왜지..? 확인해봐야겠다 아무튼 문제푸는 방식은 맞았었다 !!!