Skip to content

Commit dab4909

Browse files
authored
Merge pull request #1982 from AlgorithmWithGod/LiiNi-coder
[20260301] BOJ / G4 / 유닛 이동시키기 / 이인희
2 parents 561cbb6 + 9315986 commit dab4909

1 file changed

Lines changed: 87 additions & 0 deletions

File tree

Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
1+
```java
2+
import java.io.BufferedReader;
3+
import java.io.IOException;
4+
import java.io.InputStreamReader;
5+
import java.util.ArrayDeque;
6+
import java.util.Deque;
7+
import java.util.StringTokenizer;
8+
9+
public class Main {
10+
private static int N;
11+
private static int M;
12+
private static int A;
13+
private static int B;
14+
private static int[][] board;
15+
private static boolean[][] visited;
16+
private static final int[][] Drdcs = {
17+
{1, 0},
18+
{0, 1},
19+
{-1, 0},
20+
{0, -1}
21+
};
22+
public static void main(String[] args)throws IOException{
23+
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
24+
StringTokenizer st = new StringTokenizer(br.readLine());
25+
N = Integer.parseInt(st.nextToken());
26+
M = Integer.parseInt(st.nextToken());
27+
A = Integer.parseInt(st.nextToken());
28+
B = Integer.parseInt(st.nextToken());
29+
int K = Integer.parseInt(st.nextToken());
30+
board = new int[N+1][M+1];
31+
visited = new boolean[N+1][M+1];
32+
for(int i=0; i<K;i++){
33+
st = new StringTokenizer(br.readLine());
34+
int r = Integer.parseInt(st.nextToken());
35+
int c = Integer.parseInt(st.nextToken());
36+
board[r][c] = 1;
37+
}
38+
st = new StringTokenizer(br.readLine());
39+
int sr = Integer.parseInt(st.nextToken());
40+
int sc = Integer.parseInt(st.nextToken());
41+
st = new StringTokenizer(br.readLine());
42+
int er = Integer.parseInt(st.nextToken());
43+
int ec = Integer.parseInt(st.nextToken());
44+
45+
System.out.println(bfs(sr,sc,er,ec));
46+
}
47+
48+
private static int bfs(int sr, int sc, int er, int ec){
49+
Deque<int[]> q = new ArrayDeque<>();
50+
q.offer(new int[]{sr, sc, 0});
51+
visited[sr][sc] = true;
52+
while(!q.isEmpty()){
53+
int[] cur = q.poll();
54+
int r = cur[0];
55+
int c = cur[1];
56+
int dist = cur[2];
57+
if(r==er && c==ec){
58+
return dist;
59+
}
60+
61+
for(int i=0;i<4;i++){
62+
int nr = r + Drdcs[i][0];
63+
int nc = c + Drdcs[i][1];
64+
65+
if(nr<1||nc<1||nr+A-1>N||nc+B-1>M) continue;
66+
if(visited[nr][nc]) continue;
67+
if(isBlocked(nr,nc)) continue;
68+
visited[nr][nc] = true;
69+
q.offer(new int[]{nr,nc,dist+1});
70+
}
71+
}
72+
73+
return -1;
74+
}
75+
76+
private static boolean isBlocked(int r, int c){
77+
for(int i=r; i<r+A; i++){
78+
for(int j=c; j<c+B; j++){
79+
if(board[i][j]==1){
80+
return true;
81+
}
82+
}
83+
}
84+
return false;
85+
}
86+
}
87+
```

0 commit comments

Comments
 (0)