https://www.acmicpc.net/problem/17070
ํธ๋ ๋์ ์ฌ๊ณ ๊ณผ์ ๋ฐ ๊ฐ์ ์
dfs๋ฅผ ์ฌ์ฉํ๊ณ , ์ฒ์์ ๊ตฌ์ํ๋๋ก ์ ํ๋ ค์ ๊ธฐ๋ถ ์ข์๋ ๋ฌธ์ .
์ขํ๋ฅผ i, j ๊ฐ ๋ฐ๋ก ๋๊ธฐ์ง ์๊ณ new int[]{i,j} ํํ๋ก ํฌ๊ธฐ 2์ง๋ฆฌ int๋ฐฐ์ด ์ขํ ๊ฐ์ฒด๋ฅผ ๋ง๋ค์ด์ ๋๊ฒผ๋๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์์ฒญ ์ฌ์ฉํ๋ค.
์ ๋ต์ฝ๋
์ฐ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์์ฒญ ์ก์๋จน์ ์ฝ๋ ๋จผ์ ๋ณด๊ฒ ๋ค. ๊ทผ๋ฐ ์ฌ์ค new int[]{i, j} ์ฝ๋๋ฅผ ๊ทธ๋ฅ ๋ถ๋ฆฌ์ํจ๊ฑฐ๋ผ์ ๋์ผํ ์ฝ๋๋ค. ์ฒ์์๋ ๋ฐฉ๋ฌธ์ฒดํฌ๋ฅผ ํด์ผ๋ ์ค ์๊ณ visited๋ ๋ง๋ค์๋๋ฐ ์ด์ ์ผ๋ก ๋์๊ฐ๋ ๊ฒฝ์ฐ๊ฐ ์์ด์ ๋ฐฉ๋ฌธ ์ฒ๋ฆฌ๋ ํ์ํ์ง์์๋ค.
import java.util.*;
import java.io.*;
public class Main {
static int n;
static int[][] map;
static boolean[][] v;
static int find;
static int state; // 0,1,2
public static void dfs(int cs, int[] next) {
int ci = next[0];
int cj = next[1];
if (ci == n - 1 && cj == n - 1) {
find++;
return;
}
if (cs == 0) {// ์ด์ ์ํ๊ฐ ๊ฐ๋ก. ๋ค์๊ธธ์ 0,1 ๋ง ๋ณด๋ฉด๋จ.
// 0
if (cj < n - 1 && map[ci][cj + 1] == 0) {
dfs(0, new int[] { ci, cj + 1 });
}
// 1
if (cj < n - 1 && ci < n - 1 && map[ci + 1][cj + 1] == 0 && map[ci][cj + 1] == 0 && map[ci + 1][cj] == 0) {
dfs(1, new int[] { ci + 1, cj + 1 });
}
}
if (cs == 1) {// ๋ค์๊ธธ์ 0,1,2 ๋ณด๋ฉด๋จ.
// 0
if (cj < n - 1 && map[ci][cj + 1] == 0) {
dfs(0, new int[] { ci, cj + 1 });
}
// 1
if (cj < n - 1 && ci < n - 1 && map[ci + 1][cj + 1] == 0 && map[ci][cj + 1] == 0 && map[ci + 1][cj] == 0) {
dfs(1, new int[] { ci + 1, cj + 1 });
}
// 2
if (ci < n - 1 && map[ci + 1][cj] == 0) {
dfs(2, new int[] { ci + 1, cj });
}
}
if (cs == 2) {// ๋ค์๊ธธ์ 1,2 ๋ณด๋ฉด๋จ.
// 1
if (cj < n - 1 && ci < n - 1 && map[ci + 1][cj + 1] == 0 && map[ci][cj + 1] == 0 && map[ci + 1][cj] == 0) {
dfs(1, new int[] { ci + 1, cj + 1 });
}
// 2
if (ci < n - 1 && map[ci + 1][cj] == 0) {
dfs(2, new int[] { ci + 1, cj });
}
}
}
public static void main(String[] args) throws Exception {
// System.setIn(new FileInputStream("res/input.txt"));
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
n = Integer.parseInt(br.readLine());
map = new int[n][n];
v = new boolean[n][n];
find = 0;
state = 0; // 0,1,2 -> ๊ฐ๋ก ๋๊ฐ ์ธ๋ก
StringTokenizer st = null;
for (int i = 0; i < n; i++) {
st = new StringTokenizer(br.readLine(), " ");
for (int j = 0; j < n; j++) {
map[i][j] = Integer.parseInt(st.nextToken());
}
}
// 0,0 ์ด๋ 0,1 ์ ์ด๋ฏธ ๋ฐฉ๋ฌธ์ฒ๋ฆฌ ๋๊ฑฐ๊ณ ์์์ง์ ์ด 0,1๋ถํฐ
v[0][0] = true;
v[0][1] = true;
dfs(0, new int[] { 0, 1 });
System.out.println(find);
}
}
๊ทธ๋ฆฌ๊ณ ์ด ์ฝ๋๊ฐ ์ขํ๋ฅผ ๋ถ๋ฆฌ์ํจ ์ฝ๋
import java.util.*;
import java.io.*;
public class Main {
static int n;
static int[][] map;
static int find;
public static void dfs(int ci, int cj, int cs) {
if (ci == n - 1 && cj == n - 1) {
find++;
return;
}
if (cs == 0) {
if (cj < n - 1 && map[ci][cj + 1] == 0) {
dfs(ci, cj + 1, 0);
}
if (cj < n - 1 && ci < n - 1 && map[ci + 1][cj + 1] == 0 && map[ci][cj + 1] == 0 && map[ci + 1][cj] == 0) {
dfs(ci + 1, cj + 1, 1);
}
} else if (cs == 1) {
if (cj < n - 1 && map[ci][cj + 1] == 0) {
dfs(ci, cj + 1, 0);
}
if (cj < n - 1 && ci < n - 1 && map[ci + 1][cj + 1] == 0 && map[ci][cj + 1] == 0 && map[ci + 1][cj] == 0) {
dfs(ci + 1, cj + 1, 1);
}
if (ci < n - 1 && map[ci + 1][cj] == 0) {
dfs(ci + 1, cj, 2);
}
} else if (cs == 2) {
if (cj < n - 1 && ci < n - 1 && map[ci + 1][cj + 1] == 0 && map[ci][cj + 1] == 0 && map[ci + 1][cj] == 0) {
dfs(ci + 1, cj + 1, 1);
}
if (ci < n - 1 && map[ci + 1][cj] == 0) {
dfs(ci + 1, cj, 2);
}
}
}
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
n = Integer.parseInt(br.readLine());
map = new int[n][n];
find = 0;
StringTokenizer st = null;
for (int i = 0; i < n; i++) {
st = new StringTokenizer(br.readLine(), " ");
for (int j = 0; j < n; j++) {
map[i][j] = Integer.parseInt(st.nextToken());
}
}
dfs(0, 1, 0); // ์์ ์์น ์ค์
System.out.println(find);
}
}
๋์์ด ๋๋ค๋ฉด ๋๊ธ์ด๋ ๊ณต๊ฐ ๋ฒํผ ํ ๋ฒ์ฉ ๋๋ฅด๊ณ ๊ฐ์ฃผ์ธ์! ๋ก๊ทธ์ธ ์ํด๋ ๋ฉ๋๋ค ^_^
๋ฐ์ํ
'OJ๐ผ > ์ค๋ต๋ ธํธ๐' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[BOJ][JAVA] 2110๋ฒ: ๊ณต์ ๊ธฐ ์ค์น (0) | 2024.03.06 |
---|---|
[BOJ][JAVA] 1717๋ฒ: ์งํฉ์ ํํ, 1976๋ฒ: ์ฌํ๊ฐ์ (0) | 2024.03.03 |
[SWEA][JAVA] 1949. [๋ชจ์ SW ์ญ๋ํ ์คํธ] ๋ฑ์ฐ๋ก ์กฐ์ฑ (0) | 2024.03.01 |
[BOJ][JAVA] 14502: ์ฐ๊ตฌ์ (0) | 2024.03.01 |
[BOJ][JAVA] 1918๋ฒ: ํ์ ํ๊ธฐ์ (0) | 2024.02.17 |