Tags
- ๋๋น ์ฐ์ ํ์
- BFS
- queue
- Java
- DP
- ๊น์ด ์ฐ์ ํ์
- ์ ๋ ฌ
- ๋ฐฑํธ๋ํน
- ์ ์๋ก
- ์ํ
- SpringBoot
- ์๋ฃ๊ตฌ์กฐ
- Python
- ์๋ฎฌ๋ ์ด์
- LV2
- ๊ทธ๋ํ ํ์
- CodingTest
- ๊ต์ฌ
- ๊ทธ๋ํ ์ด๋ก
- greedy
- Dynamic Programming
- sort
- Study
- BOJ
- PGM
- Brute Force Algorithm
- ๋ฌธ์์ด
- ๊ตฌํ
- stack
- dfs
Archives
๊ธฐ๋ก๋ฐฉ
BOJ_13460 : ๊ตฌ์ฌ ํ์ถ 2 ๋ณธ๋ฌธ
๐ธ ๋ฌธ์ ๋ถ์ ๐ธ
- N x M ๋ณด๋ํ์ ๋ชจ์๋ฆฌ๋ ๋งํ์๊ณ , ๋นจ๊ฐ ๊ณต : R, ํ๋ ๊ณต : B, ๊ตฌ๋ฉ : O ๊ฐ ์ฃผ์ด์ง๋ค.
- ๋ณด๋ํ์ ๊ธฐ์ธ์ด๋ฉด ๋ ๊ณต์ด ์์ง์ผ ์ ์๋ ๊ณต๊ฐ ๋๊น์ง ํ์ชฝ์ผ๋ก ์ด๋ํ๋ค.
- ๋นจ๊ฐ ๊ณต ๋ง ๊ตฌ๋ฉ์ผ๋ก ๋บ ์ ์์ผ๋ฉด 1, ์์ผ๋ฉด 0 ์ ์ถ๋ ฅํ๋ค.
- ๋ณด๋ํ์ ๊ธฐ์ธ์ด๋ 4๊ฐ์ง ์ ํ์ ๋ฐ๋ฅธ ๊ฒฐ๊ณผ๋ฅผ ํ์ธํด์ผ ํ๋ฏ๋ก BFS๋ฅผ ์ฌ์ฉํ๋ค.
- ๊ณต์ ๊ตด๋ฌ๊ฐ, ๊ฒ์ ์ข ๋ฃ ํ์ธ์ ์๋ฎฌ๋ ์ด์ ํ๋ค.
๐ธ ์ฝ๋ ๐ธ
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayDeque;
import java.util.Queue;
import java.util.StringTokenizer;
public class Main {
private static char[][] map;
private static int[] dx = {-1, 0, 1, 0};
private static int[] dy = {0, 1, 0, -1};
public static void main(String[] args) throws IOException {
// Input
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int N = Integer.parseInt(st.nextToken());
int M = Integer.parseInt(st.nextToken());
map = new char[N][M];
int[] start = new int[4];
for (int i = 0; i < N; i++) {
String s = br.readLine();
for (int j = 0; j < M; j++) {
char c = s.charAt(j);
if (c == 'R') {
start[0] = i;
start[1] = j;
map[i][j] = '.';
} else if (c == 'B') {
start[2] = i;
start[3] = j;
map[i][j] = '.';
} else {
map[i][j] = c;
}
}
}
// BFS + Output
System.out.println(bfs(start));
}
private static int bfs(int[] start) {
Queue<int[]> que = new ArrayDeque<>();
que.add(start);
int cnt = 1;
while (!que.isEmpty() && cnt <= 10) {
int size = que.size();
for (int i = 0; i < size; i++) {
int[] points = que.poll();
for (int j = 0; j < 4; j++) {
int[] result = new int[4]; // ๊ตด๋ ธ์๋ ๊ณต ์์น
int ret = go(j, points, result); // ๊ณต ๊ตด๋ ค๋ณด๊ธฐ
if (ret == 1) return cnt; // ์ ๋ต ์ฐพ์
else if (ret == 0) { // ์งํ์ ๊ฐ๋ฅ
que.add(result);
}
}
}
cnt++;
}
return -1;
}
private static int go(int d, int[] points, int[] result) {
boolean red = false, blue = false;
int rx = points[0];
int ry = points[1];
int bx = points[2];
int by = points[3];
// System.out.println(rx + " " + ry + " " + bx + " " + by + " " + d);
// ๋นจ๊ฐ ๊ณต ๊ตด๋ฆฌ๊ธฐ
while (map[rx + dx[d]][ry + dy[d]] != '#') {
rx += dx[d];
ry += dy[d];
if (map[rx][ry] == 'O') {
red = true;
break;
}
// System.out.println(rx + " " + ry);
}
// ํ๋ ๊ณต ๊ตด๋ฆฌ๊ธฐ
while (map[bx + dx[d]][by + dy[d]] != '#') {
bx += dx[d];
by += dy[d];
if (map[bx][by] == 'O') {
blue = true;
break;
}
}
if (blue) return 2; // ํ๋๊ณต ๋ค์ด๊ฐ๋ฒ๋ฆผ (์งํ๋ถ๊ฐ)
else if (red) return 1; // ๋นจ๊ฐ ๊ณต๋ง ๋ค์ด๊ฐ (์ฑ๊ณต)
else { // ๋ ๋ค ์๋ค์ด๊ฐ (๊ณ์ ์งํ)
if (rx == bx && ry == by) { // ๋ ๊ณต์ด ๊ฒน์นจ
if (first(d, points)) { // ๋นจ๊ฐ ๊ณต์ด ๋น ๋ฆ
bx += dx[(d + 2) % 4];
by += dy[(d + 2) % 4];
} else { // ํ๋ ๊ณต์ด ๋น ๋ฆ
rx += dx[(d + 2) % 4];
ry += dy[(d + 2) % 4];
}
}
result[0] = rx;
result[1] = ry;
result[2] = bx;
result[3] = by;
return 0;
}
}
private static boolean first(int d, int[] points) {
if (d == 0) {
return points[0] < points[2];
} else if (d == 1) {
return points[1] > points[3];
} else if (d == 2) {
return points[0] > points[2];
} else {
return points[1] < points[3];
}
}
}
๐ธ ์ฝ๋ ํด์ ๐ธ
- ๋ณด๋ํ ์ ๋ณด๋ฅผ ์ ๋ ฅ ๋ฐ์ ๋ ๊ณต๋ค์ ์ขํ๋ฅผ start ๋ฐฐ์ด์ ์ ์ฅํ๊ณ ๊ทธ ์๋ฆฌ๋ ๋น ๊ณต๊ฐ '.'์ผ๋ก ์ ์ฅํ๋ค.
- BFS๋ฅผ ๋๋ ค ๋นจ๊ฐ๊ณต๋ง ๋น ์ ธ๋์ฌ ์ ์๋์ง ํ๋จํ๋ค.
- ๊ฒฉ์ํ์ ๊ธฐ์ธ์ด๋ ๋ฐฉํฅ์ ๋ฐ๋ผ ๋ฌ๋ฆฌ์ง๋ ๊ฒฝ์ฐ์ ์๋ฅผ ํ์ ๋ด์๊ฐ๋ฉฐ ๊ณ์ฐํ๋ค.
- ๊ฒฉ์ํ์ ๊ธฐ์ธ์ธ ํ ๊ณต์ ์์น๋ ๊ฒฐ๊ณผ๋ go ๋ฉ์๋์์ ๊ตฌํ๋ค.
- while๋ฌธ์ผ๋ก ๋ ๊ณต์ ๋๊น์ง ๋๋ ค๋ณด๊ณ ํ๋๊ณต์ด ๋ค์ด๊ฐ์ผ๋ฉด ์งํ๋ถ๊ฐ, ๋นจ๊ฐ๊ณต๋ง ๋ค์ด๊ฐ์ผ๋ฉด ์ฑ๊ณต์ผ๋ก ํ๋จํ๋ค.
- ๋ง์ฝ ๋ ๊ณต์ด ๊ฒน์ณค์ผ๋ฉด ๋ฐฉํฅ์ ๋ฐ๋ผ ๋จผ์ ์ด๋ํ ๊ณต์ first๋ฉ์๋๋ก ์ฐพ์ ๋ค๋ฆ๊ฒ ์์ง์ธ ๊ณต์ ํ ์นธ ๋ค๋ก ๋๋ฆฐ๋ค.
- ์งํ๋ถ๊ฐ๋ 2, ์ฑ๊ณต์ 1, ๊ณ์ ์งํํด ๋ด์ผ ๋๋ฉด 0์ ๋ฆฌํดํ๋ค.
- ์ฑ๊ณตํ๋ฉด bfs ๋ฉ์๋๋ฅผ ์ข ๋ฃํ๊ณ , ๊ณ์ ์งํํด์ผ ๋๋ฉด ํ์ ์ขํ๋ฅผ ๋ฃ๋๋ค.
- ๊ธฐ์ธ์ ํ์๋ฅผ ์ถ๋ ฅํ๋ค ์ถ๋ ฅํ๋ค.
๐ธ end ๐ธ
- ๊ตฌ์ฌ ํ์ถ1 ์์ ์ฝ๋๋ฅผ ์ฝ๊ฐ ์์ ํ๋๋ ํต๊ณผ๋์๋ค.
- ๊ตฌ์ฌ ํ์ถ1 ๋๋ฒ๊น ์ ๋์์ด ๋์๋ค.
728x90
'CodingTest > Java' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
BOJ_17144 : ๋ฏธ์ธ๋จผ์ง ์๋ ! (0) | 2023.04.07 |
---|---|
BOJ_1068 : ํธ๋ฆฌ (0) | 2023.04.07 |
BOJ_16236 : ์๊ธฐ ์์ด (0) | 2023.04.07 |
BOJ_14890 : ๊ฒฝ์ฌ๋ก (0) | 2023.04.07 |
BOJ_13459 : ๊ตฌ์ฌ ํ์ถ (0) | 2023.04.06 |