Tags
- CodingTest
- Java
- Study
- ๊ทธ๋ํ ํ์
- queue
- dfs
- ๊น์ด ์ฐ์ ํ์
- stack
- LV2
- greedy
- ๊ตฌํ
- BFS
- ๋ฐฑํธ๋ํน
- DP
- Dynamic Programming
- ๋๋น ์ฐ์ ํ์
- ์ํ
- ๊ทธ๋ํ ์ด๋ก
- Python
- ์ ๋ ฌ
- sort
- SpringBoot
- PGM
- ๊ต์ฌ
- ์๋ฎฌ๋ ์ด์
- ์๋ฃ๊ตฌ์กฐ
- ๋ฌธ์์ด
- ์ ์๋ก
- BOJ
- Brute Force Algorithm
Archives
๊ธฐ๋ก๋ฐฉ
BOJ_17070 : ํ์ดํ ์ฎ๊ธฐ๊ธฐ 1 ๋ณธ๋ฌธ
๐ธ ๋ฌธ์ ๋ถ์ ๐ธ
- N x N ๊ฒฉ์๊ณต๊ฐ์์ ์ข์๋จ๋ถํฐ ์ฐ์๋จ์ผ๋ก ํ์ดํ๋ฅผ ์ด๋์ํฌ ์ ์๋ ๊ฒฝ์ฐ์ ์๋ฅผ ์ถ๋ ฅํ๋ค.
- ํ์ดํ๋ ์ค๋ฅธ์ชฝ, ์ฐํ๋จ ๋๊ฐ์ , ์๋๋ก ๋ฐ ์ ์๋ค.
- ๊ฒฉ์๊ณต๊ฐ์๋ ๋์ด ์๋ค.
- ํ์ดํ๋ฅผ ๋๋ฆด ๋ ํ๋ณด๋์ด์ผ ํ๋ ๊ณต๊ฐ์ ๋์ด ์๊ฑฐ๋ ๊ฒฉ์ ๊ณต๊ฐ์ ๋ฒ์ด๋์๋ ์๋๋ค.
- DFS๋ก ๋๊น์ง ๋์ฐฉํ๋ ๊ฒฝ์ฐ๋ฅผ ์นด์ดํธํ๋ค.
- ๊ธฐ์กด ๊ฐ๋ก ์ผ๋๋ ๊ฐ๋ก์ ๋๊ฐ์ , ๊ธฐ์กด ์ธ๋ก ์ผ๋๋ ์ธ๋ก์ ๋๊ฐ์ , ๊ธฐ์กด ๋๊ฐ์ ์ผ๋๋ ์ธ ๊ฐ์ง ๋ชจ๋ ๊ฒฝ์ฐ๋ฅผ ํ์ธํด์ผ ํ๋ค.
๐ธ ์ฝ๋ ๐ธ
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
private static int N, map[][], ans;
private static int[] dr = {0,1,1};
private static int[] dc = {1,1,0};
public static void main(String[] args) throws IOException {
// Input
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
N = Integer.parseInt(br.readLine());
map = new int[N][N];
for (int i = 0; i < N; i++) {
StringTokenizer st = new StringTokenizer(br.readLine());
for (int j = 0; j < N; j++) {
map[i][j] = Integer.parseInt(st.nextToken());
}
}
// DFS
ans = 0;
dfs(0, 1, 0);
// Output
System.out.println(ans);
}
private static void dfs(int r, int c, int d) {
if (r == N-1 && c == N-1) {
ans++;
return;
}
switch (d) {
case 0: // ๊ธฐ์กด ๊ฐ๋ก
// ๊ฐ๋ก
if (check(r+dr[0],c+dc[0]))
dfs(r+dr[0], c+dc[0], 0);
// ๋๊ฐ์
if (check(r+dr[0],c+dc[0])
&&check(r+dr[1],c+dc[1])
&&check(r+dr[2],c+dc[2]))
dfs(r+dr[1], c+dc[1], 1);
break;
case 1: // ๊ธฐ์กด ๋๊ฐ์
// ๋๊ฐ์
if (check(r+dr[0],c+dc[0])
&&check(r+dr[1],c+dc[1])
&&check(r+dr[2],c+dc[2]))
dfs(r+dr[1], c+dc[1], 1);
// ๊ฐ๋ก
if (check(r+dr[0],c+dc[0]))
dfs(r+dr[0], c+dc[0], 0);
// ์ธ๋ก
if (check(r+dr[2],c+dc[2]))
dfs(r+dr[2], c+dc[2], 2);
break;
case 2: // ๊ธฐ์กด ์ธ๋ก
// ์ธ๋ก
if (check(r+dr[2],c+dc[2]))
dfs(r+dr[2], c+dc[2], 2);
// ๋๊ฐ์
if (check(r+dr[0],c+dc[0])
&&check(r+dr[1],c+dc[1])
&&check(r+dr[2],c+dc[2]))
dfs(r+dr[1], c+dc[1], 1);
break;
}
}
private static boolean check(int r, int c) {
if (0 <= r && r < N && 0 <= c && c < N && map[r][c] == 0)
return true;
return false;
}
}
๐ธ ์ฝ๋ ํด์ ๐ธ
- ํ์ดํ์ ์์ชฝ ์ ๊ตฌ์ ์ขํ๋ 0, 1๋ถํฐ ์์ํ๋ค.
- ํ์ดํ ์ขํ๋ฅผ r, c ๋ก, ๋ฐฉํฅ์ d๋ก ๋๊ฒจ dfs ๋ฉ์๋์์ ์ฌ๊ท๋ฅผ ์ํํ๋ค.
- ๊ฐ ๋ฐฉํฅ์ ๋ฐ๋ฅธ ํ์ธํด์ผ ํ ๊ฒฝ์ฐ์ ์๋ก ์ฌ๊ท ํธ์ถ์ ์ํํ๋ค.
- ๋น๊ณต๊ฐ ํ์ธ์ ๋ฐ๋ก check ๋ฉ์๋๋ฅผ ๋นผ์ ํ์ธํ๋ค.
- ๋๊น์ง ๋์ฐฉํ๋ฉด ans๋ฅผ +1 ํ๋ค.
- ans๋ฅผ ์ถ๋ ฅํ๋ค.
๐ธ end ๐ธ
- dfs๋ก ํ์ดํ์ง๋ง, DP๋ก ๋ ํจ์จ์ ์ด๊ฒ ํ์ด๊ฐ ๊ฐ๋ฅํ ๊ฒ ๊ฐ๋ค.
728x90
'CodingTest > Java' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
BOJ_17143 : ๋์์ (0) | 2023.04.07 |
---|---|
BOJ_16928 : ๋ฑ๊ณผ ์ฌ๋ค๋ฆฌ ๊ฒ์ (0) | 2023.04.07 |
BOJ_14889 : ์คํํธ์ ๋งํฌ (0) | 2023.04.07 |
BOJ_17144 : ๋ฏธ์ธ๋จผ์ง ์๋ ! (0) | 2023.04.07 |
BOJ_1068 : ํธ๋ฆฌ (0) | 2023.04.07 |