BOJ_G2_3109
๐ [G2_3109] ๋นต์ง
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
static StringTokenizer st;
static boolean[][] visited;
static int[][] arr;
static int R, C;
static int[] dx = {1, 1, 1};
static int[] dy = {-1, 0, 1};
// ํ์ดํ๋ผ์ธ์ ์ต๋ ๊ฐ์
static int cnt;
static int nx, ny;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
st = new StringTokenizer(br.readLine(), " ");
// ํ
R = Integer.parseInt(st.nextToken());
// ์ด
C = Integer.parseInt(st.nextToken());
arr = new int[R][C];
// true๋ฉด ๊ฑด๋ฌผ์ด๋ ์ง๋๊ฐ ์๋ฆฌ , false๋ฉด ์ง๋๊ฐ ์ ์๋ ์๋ฆฌ
visited = new boolean[R + 1][C + 1];
// ๋ฐฐ์ด ์
๋ ฅ
for (int i = 0; i < R; i++) {
String str = br.readLine();
for (int j = 0; j < C; j++) {
arr[i][j] = str.charAt(j);
if (arr[i][j] == 'x') {
visited[i][j] = true;
}
}
}
for (int i = 0; i < R; i++) {
dfs(i, 0);
}
System.out.println(cnt);
}
static boolean dfs(int y, int x) {
// ๊ธฐ์ ์กฐ๊ฑด : ๋์ ๋์ฐฉํ๋ ๊ฒฝ์ฐ ์นด์ดํ
++
if (x == C - 1) {
cnt++;
return true;
}
visited[y][0] = true;
for (int z = 0; z < 3; z++) {
nx = x + dx[z];
ny = y + dy[z];
//๋ชป๊ฐ
if (nx < 0 || ny < 0 || ny >= R || visited[ny][nx] == true) {
continue;
}
// ๊ฐ ์ ์๋ ๊ณณ
if (!visited[ny][nx]) {
visited[ny][nx] = true;
if(dfs(ny, nx)){
return true;
}
}
}
return false;
}
}
๐ค ๋์ ์๊ฐ
๋ด๊ฐ ์๊ฐํ ์ฌ๊ธฐ์ ํคํฌ์ธํธ๋ ์ต๋์ ๊ฒฝ์ฐ๋ฅผ ๊ตฌํ๋ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ์ค๋ฅธ์ชฝ ์ -> ์ค๋ฅธ์ชฝ -> ์ค๋ฅธ์ชฝ ์๋ ์์ผ๋ก ํ์์ ํ๋ ๊ฒ ์ด๋ค.
๊ทธ๋ฆฌ๊ณ ํ๋ง๋ค ๋๋ ์ ํ ์ค์ ๋๊น์ง ๋ค ๊ฐ๊ฒ ๋๋ฉด ๊ทธ ๊ณผ์ ์ ๋์ ๋ด๊ณ ๋ค์ ๋ค์ ํ์ผ๋ก ๊ฐ์ ๊ฐ์ ๊ณผ์ ์ ์งํํ๋ค.
๊ธฐ์กด์ ๋ฐํ๊ฐ์ void๋ก ๋ฐ์์ ๋ฉ์๋๋ฅผ ๋๋ด์ผํ๋๋ฐ ๊ทธ์ ๊ฐ์ผ๋ก ๋์๊ฐ์ ๋ฉ์๋์์ ๋์ฌ ์๊ฐ ์์ด์ dfs ๋ฉ์๋์ ๋ฐํ๊ฐ์ boolean์ผ๋ก ์ค์ ํ์๋๋ฐ ์ด๊ฒ์ด ๋ด๊ฐ ๋๋ฉดํ ๋ฌธ์ ์ ํด๊ฒฐ์ฑ
์ด ๋์๋ค.
3๋ฐฉํฅ ํ์๊ณผ ๊ฐ์ง์น๊ธฐ๋ง ์ํ๋ฉด ๊ด์ฐฎ์๋ ๋ฌธ์ ์ด๋ค.