위 문제는 R, G, B가 있을 때
적록색약이 아닌 사람이 봤을 때 R, G, B 가 따로 보이므로 R, G, B 구역을 각각 따로 보고
적록색약인 사람이 봤을 때 R과 G는 똑같이 보이고 B는 따로 보인다.
적록색약이 아닌 사람이 봤을 때
RRRBB
GGBBB
BBBRR
BBRRR
RRRRR
적록색약이 봤을 때
RRRBB
GGBBB
BBBRR
BBRRR
RRRRR
▶코드
import java.util.*;
import java.io.*;
public class Main {
static char RGB[][];
static boolean visited[][];
static int dx[] = {0, 0, -1, 1};
static int dy[] = {-1, 1, 0, 0};
static char dz[] = {'R', 'G', 'B'};
static int N, cnt;
static LinkedList<Integer> result;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
N = Integer.parseInt(br.readLine());
RGB = new char[N][N];
visited = new boolean[N][N];
result = new LinkedList<>();
cnt = 1;
int count = 1;
for (int i = 0; i < N; i++) {
String str = br.readLine();
for (int j = 0; j < N; j++) {
RGB[i][j] = str.charAt(j);
}
}
for (int a = 0; a < 2; a++) {
visited = new boolean[N][N];
result = new LinkedList<>();
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
if (count == 1) {
for (int z = 0; z < 3; z++) {
if (RGB[i][j] == dz[z] && !visited[i][j]) {
dfs(i, j, dz[z]);
result.add(cnt);
cnt = 1;
}
}
} else if (count == 2) {
for (int z = 0; z < 3; z++) {
if (RGB[i][j] == dz[z] && !visited[i][j]) {
dfs1(i, j, dz[z]);
result.add(cnt);
cnt = 1;
}
}
}
}
}
count++;
System.out.print(result.size()+" ");
}
}
public static void dfs(int x, int y, char arr) {
visited[x][y] = true;
for (int i = 0; i < 4; i++) {
int nx = dx[i] + x;
int ny = dy[i] + y;
if (nx >= 0 && ny >= 0 && nx < N && ny < N && !visited[nx][ny] && RGB[nx][ny] == arr) {
dfs(nx, ny, arr);
cnt++;
}
}
}
public static void dfs1(int x, int y, char arr) {
visited[x][y] = true;
for (int i = 0; i < 4; i++) {
int nx = dx[i] + x;
int ny = dy[i] + y;
if(arr=='R' || arr=='G'){
if (nx >= 0 && ny >= 0 && nx < N && ny < N && !visited[nx][ny] && (RGB[nx][ny] == 'R' ||RGB[nx][ny] == 'G')) {
dfs1(nx, ny, arr);
cnt++;
}
}
else{
if (nx >= 0 && ny >= 0 && nx < N && ny < N && !visited[nx][ny] && RGB[nx][ny] == arr) {
dfs1(nx, ny, arr);
cnt++;
}
}
}
}
}
'알고리즘 > 백준 풀이(탐색)' 카테고리의 다른 글
백준 11725번 - 트리의 부모 찾기(DFS) (0) | 2024.04.20 |
---|---|
백준 2468번 - 안전 영역(DFS) (1) | 2024.04.20 |
백준 11724번 - 연결 요소의 개수(DFS) (0) | 2024.04.19 |
백준 2667번 - 단지번호붙이기(DFS) (0) | 2024.04.19 |
백준 1012번 - 유기농 배추(DFS) (0) | 2024.04.19 |