Notice
Recent Posts
Recent Comments
Link
뮁이의 개발새발
[JAVA] 백준 10026 적록색약 (DFS) 본문
DFS를 활용하여 풀 수 있는 문제 ,,
처음에 필터링처럼 1 비트연산자로 곱해줘서 색깔별로 나오는 애들만 봐주면 되지않을까 했는데 어차피 걔네도 구역을 계산하는 로직은 필요하고,, dfs는 아직 어려워서 결국 다른분의 코드를 활용해서 풀었다 ㅠㅠ
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
//bj10026
public class Main {
static int N; // 원소 개수
static char[][] map;
// 상하좌우
static int[] deltax = { 0, 0, -1, 1 };
static int[] deltay = { -1, 1, 0, 0 };
static boolean[][] visited;
public static void main(String[] args) throws IOException {
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
N = Integer.parseInt(in.readLine());
visited = new boolean[N][N];
map = new char[N][N];
for (int i = 0; i < N; i++) {
String str = in.readLine();
for (int j = 0; j < N; j++) {
map[i][j] = str.charAt(j);
}
}
// 정상인
int cnt = 0;
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
if (!visited[i][j]) {
cnt++;
dfs(i, j, map[i][j]);
}
}
}
System.out.print(cnt + " ");
// 색약인
changemap();
visited = new boolean[N][N];
int cnt2 = 0;
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
if (!visited[i][j]) {
cnt2++;
dfs(i, j, map[i][j]);
}
}
}
System.out.println(cnt2);
}
static void dfs(int y, int x, char color) {
if (visited[y][x]) {
return;
}
visited[y][x] = true;
for (int i = 0; i < 4; i++) {
int tempx = x + deltax[i];
int tempy = y + deltay[i];
if (tempx < 0 || tempx >= N || tempy < 0 || tempy >= N) {
continue;
}
if (color == map[tempy][tempx]) {
dfs(tempy, tempx, color);
}
}
}
static void changemap() {
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
if (map[i][j] == 'G') {
map[i][j] = 'R';
}
}
}
}
}
'Algorithm' 카테고리의 다른 글
[JAVA] 백준 10157 자리배정 (0) | 2021.08.28 |
---|---|
[JAVA] 백준 2491 수열 (0) | 2021.08.27 |
[JAVA] 백준 2563 색종이 (0) | 2021.08.27 |
[JAVA] 백준 2605 줄세우기 (0) | 2021.08.27 |
[JAVA] 백준 2309 일곱 난쟁이 (0) | 2021.08.27 |
Comments