-
Notifications
You must be signed in to change notification settings - Fork 0
/
Main13459.java
128 lines (113 loc) · 2.36 KB
/
Main13459.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main13459 {
static int[] dx = { -1, 0, 1, 0 };
static int[] dy = { 0, -1, 0, 1 };//nwse
static int N, M,result;
static char[][] map;
static int count = 0;
static boolean rs,bs;
public static void main(String[] args) throws NumberFormatException, IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
N = Integer.parseInt(st.nextToken());
M = Integer.parseInt(st.nextToken());
int rx = 0,ry=0,bx=0,by=0;
map = new char[N][M];
result = 0;
for (int i = 0; i < N; i++) {
map[i] = br.readLine().toCharArray();
for (int j = 0; j < M; j++) {
if (map[i][j] == 'R') {
rx = i;
ry = j;
} else if (map[i][j] == 'B') {
bx = i;
by =j;
}
}
}
rs=false;
bs=false;
dfs(0,rx,ry,bx,by);
System.out.println(result);
}
static void dfs(int time,int rx,int ry,int bx,int by) {
if(time == 10) {
return;
}
if(result == 1) { //R이 O에 들어간적있으면
return;
}
for(int i=0;i<4;i++) {
int rnx = rx+dx[i];
int rny = ry+dy[i];
int bnx = bx+dx[i];
int bny = by+dy[i];
while(map[rnx][rny] !='#') {
if(map[rnx][rny] == 'O') {
rs = true;
break;
}
rnx +=dx[i];
rny+=dy[i];
}
if(map[rnx][rny] == '#') {
rnx-=dx[i];
rny-=dy[i];
}
while(map[bnx][bny] !='#') {
if(map[bnx][bny] == 'O') {
bs = true;
break;
}
bnx +=dx[i];
bny+=dy[i];
}
if(map[bnx][bny] == '#') {
bnx-=dx[i];
bny-=dy[i];
}
if(bnx==rnx && bny==rny && map[bnx][bny]!='O') {//nwse//겹칠때
if(i==0) {//n
if(rx<bx) {
bnx+=1;
}else {
rnx+=1;
}
}else if(i==1) {//w
if(ry<by) {
bny+=1;
}else {
rny+=1;
}
}else if(i==2) {//s
if(rx<bx) {
rnx-=1;
}else {
bnx-=1;
}
}else {//e
if(ry<by) {
rny-=1;
}else {
bny-=1;
}
}
}
if(rnx==rx && rny==ry && bnx==bx && bny==by) {//위치가 그대로면 dfs 그만하고 다른방향으로dfs
continue;
}
if(!rs && !bs) {
dfs(time+1,rnx,rny,bnx,bny);
}else if(rs && !bs) {
result = 1;
return;
}
rs = false;
bs = false;
}
}
}