입력 : 첫째 줄 - 세로 크기 N, 가로 크기 M (1 ≤ N, M ≤ 50)
두번째 줄 - M개의 문자 ('-'와 '|'로만 이루어짐)
N만큼 두번째 줄 반복
출력 : 방 바닥을 장식하는데 필요한 나무 판자의 개수
O(N x M)
DFS
import java.util.Scanner;
public class Main {
static int n, m;
static char[][] floor;
static boolean[][] visited;
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
n = scanner.nextInt();
m = scanner.nextInt();
scanner.nextLine();
floor = new char[n][m];
visited = new boolean[n][m];
for (int i = 0; i < n; i++) {
floor[i] = scanner.nextLine().toCharArray();
}
int count = 0;
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
if (!visited[i][j]) {
count++;
dfs(i, j, floor[i][j]);
}
}
}
System.out.println(count);
scanner.close();
}
static void dfs(int x, int y, char type) {
if (x < 0 || x >= n || y < 0 || y >= m || visited[x][y] || floor[x][y] != type) {
return;
}
visited[x][y] = true;
if (type == '-') {
dfs(x, y + 1, type); // Move right
} else if (type == '|') {
dfs(x + 1, y, type); // Move down
}
}
}