뮁이의 개발새발

[JAVA] 백준 10026 적록색약 (DFS) 본문

Algorithm

[JAVA] 백준 10026 적록색약 (DFS)

뮁뮁이 2021. 8. 27. 01:55

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