PS/BOJ

백준 1388 바닥장식 / JAVA

얍연구소장 2023. 5. 18. 22:58

https://www.acmicpc.net/problem/1388

 

1388번: 바닥 장식

형택이는 건축가이다. 지금 막 형택이는 형택이의 남자 친구 기훈이의 집을 막 완성시켰다. 형택이는 기훈이 방의 바닥 장식을 디자인했고, 이제 몇 개의 나무 판자가 필요한지 궁금해졌다. 나

www.acmicpc.net

 

> 풀이

/*
 * 백준 1388 바닥장식
 * #실버4
 * #DFS
 */
public class boj_1388 {

	static int N,M;
	static char[][] arr;
	static boolean[][] checked;
	static int answer = 0;
	
	public static void main(String[] args) throws IOException {
		// TODO Auto-generated method stub
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = new StringTokenizer(br.readLine());
		N = Integer.parseInt(st.nextToken());
		M = Integer.parseInt(st.nextToken());
		
		arr = new char[N][M];
		checked = new boolean[N][M];
		
		for(int i = 0; i < N; i++) {
			arr[i] = br.readLine().toCharArray();
		}
		
		for(int i = 0; i < N; i++) {
			for(int j = 0; j < M; j++) {
				if(!checked[i][j]) {
					DFS(i,j);
				}
			}
		}
		System.out.println(answer);
	}

	public static void DFS(int x, int y) {
		checked[x][y] = true;
		
		if(arr[x][y] == '-') {
			if(y == M-1) {
				answer++;
				return;
			}
			
			int ny = y + 1;
			if(arr[x][ny] == '-' && !checked[x][ny]) {
				DFS(x,ny);
			} else {
				answer++;
				return;
			}
		}
		
		if(arr[x][y] == '|') {
			if(x == N-1) {
				answer++;
				return;
			}
			
			int nx = x + 1;
			if(arr[nx][y] == '|' && !checked[nx][y]) {
				DFS(nx,y);
			} else {
				answer++;
				return;
			}
			
		}
	}
}