[JAVA]1189 ์ปด๋ฐฑํ, ์ค๋ฒ1
๐ ๋ฌธ์
1189๋ฒ: ์ปด๋ฐฑํ
์ฒซ ์ค์ ์ ์ R(1 ≤ R ≤ 5), C(1 ≤ C ≤ 5), K(1 ≤ K ≤ R×C)๊ฐ ๊ณต๋ฐฑ์ผ๋ก ๊ตฌ๋ถ๋์ด ์ฃผ์ด์ง๋ค. ๋ ๋ฒ์งธ๋ถํฐ R+1๋ฒ์งธ ์ค๊น์ง๋ R×C ๋งต์ ์ ๋ณด๋ฅผ ๋ํ๋ด๋ '.'๊ณผ 'T'๋ก ๊ตฌ์ฑ๋ ๊ธธ์ด๊ฐ C์ธ ๋ฌธ์์ด์ด ์ฃผ์ด์ง๋ค
www.acmicpc.net
๐ ์์ด๋์ด
ํด๋น ๋ฌธ์ ์์ ํ์ธํ ์ ์ ์ผ์ชฝ ์๋์์ ์ค๋ฅธ์ชฝ ์๋ก ํฅํ๋ค๋ ์ ์ ๋๋ค.
์ด ๋ถ๋ถ๋ง ์ฃผ์ํด์ DFS ์๊ณ ๋ฆฌ์ฆ์ ์ํํ๋ฉด ๋ฉ๋๋ค.
DFS์๊ณ ๋ฆฌ์ฆ์ ์ ํํ ์ด์ ๋ K๋ฒ์งธ ์๊ฐ์ (0, c-1) ์ง์ ์ ์ค๋ ๊ฒ์ด๋ฏ๋ก ๊ฒฝ์ฐ์ ์๋ฅผ ์ธ๊ธฐ ์ข์ ๊น์ด ์ฐ์ ํ์์ ์ด์ฉํ์ฌ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์์ต๋๋ค. (BFS๋ก ํ๋ฉด ์ต๋จ ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ๊ธฐ๋ ์ฉ์ดํ์ง๋ง ๊ฐ ๊ฒฝ๋ก์ ๋ํด์ ํด๋น ๊ฒฝ๋ก์ ๋ฐ๋ฅธ ๋ฐฉ๋ฌธํ์์ ๋น๊ตํ๊ณ k๋ฒ์งธ ์ธ ๊ฒ์ ํ์ธํ๊ณ ์ด๋ ต๋ค๊ณ ์๊ฐํ์ต๋๋ค)
๐ ํ์ด
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Boj_1189_์ปด๋ฐฑํ {
private static final int[] dirX = {0, 0, -1, 1};
private static final int[] dirY = {-1, 1, 0, 0};
private static char[][] map;
private static boolean[][] visited;
private static int r, c, k;
private static int cnt = 0;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
st = new StringTokenizer(br.readLine());
r = Integer.parseInt(st.nextToken());
c = Integer.parseInt(st.nextToken());
k = Integer.parseInt(st.nextToken());
map = new char[r][c];
visited = new boolean[r][c];
for (int i = 0; i < r; i++) {
map[i] = br.readLine().toCharArray();
}
visited[r - 1][0] = true;
dfs(r - 1, 0, 1);
System.out.println(cnt);
}
private static void dfs(int x, int y, int depth) {
if (x == 0 && y == c - 1 && depth == k) {
cnt++;
}
if (k <= depth) return; //๋ ์ด์ ํ์ํ๋๊ฒ์ด ์๋ฏธ๊ฐ ์์
for (int i = 0; i < 4; i++) {
int mvx = x + dirX[i];
int mvy = y + dirY[i];
if (mvx < 0 || mvy < 0 || r <= mvx || c <= mvy || visited[mvx][mvy]) continue;//๋ฒ์๋ฅผ ๋์ด๊ฐ๊ฑฐ๋, ์ด๋ฏธ ๋ฐฉ๋ฌธํจ
if (map[mvx][mvy] == 'T') continue;
visited[mvx][mvy] = true;
dfs(mvx, mvy, depth + 1);
visited[mvx][mvy] = false;
}
}
}