- 생각
dfs를 통해 상하좌우 붙어있는 색상 중 선택한 하나의 색상과 같다면, 같은 하나의 구역으로 만들면 된다.
적록색약 환자면 적색, 녹색 색상도 똑같이 보고 같은 하나의 구역으로 만든다.
- 코드
정답 코드 : dfs로 풀었다. 같은 문자면 ture해가면서 깊이 들어감. 적록색약은 R을 G로 모두 바꿔준다음에 똑같은 작업을 해주었다.
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.LinkedList;
import java.util.Queue;
public class Main {
static int N, count, colorWeeknessCount;
static char[][] array;
static boolean[][] check;
static boolean colorWeakness;
static int[] x = { -1, 1, 0, 0 };
static int[] y = { 0, 0, -1, 1 };
public static void main(String[] args) throws Exception {
SetData();
System.out.print(count + " " + colorWeeknessCount);
}
private static void SetData() throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
N = Integer.parseInt(br.readLine());
array = new char[N][N];
check = new boolean[N][N];
colorWeakness = false;
count = 0;
colorWeeknessCount = 0;
for (int i = 0; i < N; i++) {
String s = br.readLine();
for (int j = 0; j < N; j++) {
array[i][j] = s.charAt(j);
}
}
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
if (!check[i][j]) {
check[i][j] = true;
bfs(i, j, array[i][j]);
count++;
}
}
}
for (int i = 0; i < N; i++)
for (int j = 0; j < N; j++)
check[i][j] = false;
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
if (array[i][j] == 'G')
array[i][j] = 'R';
}
}
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
if (!check[i][j]) {
check[i][j] = true;
bfs(i, j, array[i][j]);
colorWeeknessCount++;
}
}
}
}
private static void bfs(int a, int b, char temp) {
Queue<int[]> queue = new LinkedList<>();
queue.offer(new int[] { a, b });
while (!queue.isEmpty()) {
int location[] = queue.poll();
for (int direction = 0; direction < 4; direction++) {
int r = location[0] + x[direction];
int c = location[1] + y[direction];
if (r >= 0 && c >= 0 && r < N && c < N) {
if (array[r][c] == temp && !check[r][c]) {
check[r][c] = true;
queue.offer(new int[] { r, c });
}
}
}
}
}
}
'algorithm' 카테고리의 다른 글
[BOJ/JAVA] 백준 2023번 : 신기한 소수 (0) | 2021.01.18 |
---|---|
[BOJ/JAVA] 백준 2665번 : 미로만들기 (0) | 2021.01.15 |
[BOJ/JAVA] 백준 3109번 : 빵집 (0) | 2021.01.13 |
[BOJ/JAVA] 백준 9251번 : LCS(Longest Common Subsequence) (0) | 2021.01.12 |
[BOJ/JAVA] 백준 2580번 : 스도쿠 (0) | 2021.01.08 |