λ¬Έμ
https://www.acmicpc.net/problem/2206
λ΄ λ¬Έμ νμ΄
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayDeque;
import java.util.Deque;
import java.util.StringTokenizer;
public class Main {
static int[] dx = {0, 0 ,-1, 1};
static int[] dy = {-1, 1, 0, 0};
static Deque<int[]> que;
static char[][] map;
static int n;
static int m;
static int[][][] visited; // μ리λ§λ€ λ²½μ λΆμκ³ μλμ§, μλΆμκ³ μλμ§λ₯Ό μ μ₯
public static int bfs() {
while(!que.isEmpty()) {
int[] now = que.removeFirst();
int x = now[0];
int y = now[1];
int z = now[2];
if(x == n-1 && y == m-1) return visited[x][y][z];
for(int i = 0; i < 4; i++) {
int nx = x + dx[i];
int ny = y + dy[i];
if(nx < 0 || ny < 0 || nx >= n || ny >= m) continue;
if(visited[nx][ny][z] == 0) {
// λ²½μ΄ μλλ°, μ΄μ κΉμ§λ λ²½μ λΆμμ§ μμλ κ²½μ° (== λΆμ μ μλ κ²½μ°)
if(map[nx][ny] == '1' && z == 1) {
visited[nx][ny][0] = visited[x][y][1] + 1;
que.add(new int[]{nx, ny, 0});
}
// λ²½μ΄ μλ κ²½μ°
else if(map[nx][ny] == '0') {
visited[nx][ny][z] = visited[x][y][z] + 1;
que.add(new int[]{nx, ny, z});
}
}
}
}
return -1;
}
public static void main(String[] args) throws Exception {
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
st = new StringTokenizer(in.readLine());
n = Integer.parseInt(st.nextToken());
m = Integer.parseInt(st.nextToken());
map = new char[n][m];
for(int i = 0; i < n; i++) {
String tmp = in.readLine();
for(int j = 0; j < m; j++) {
map[i][j] = tmp.charAt(j);
}
}
que = new ArrayDeque<>();
que.add(new int[]{0, 0, 1}); // {xμ’ν, yμ’ν, λ²½μ λΆμλμ§ μλμ§} (λΆμ κ²½μ° 0, λΆμμ§ μμ κ²½μ° 1)
visited = new int[n][m][2];
visited[0][0][1] = 1; // [][][0]μ λΆμμ μλ κ²½μ°, [][][1]μ λΆμμ μλ κ²½μ°μ λν λμ μκ°μ μ μ₯
System.out.println(bfs());
}
}
π BFS λ¬Έμ
[ λ³μ μ€λͺ ]
- dx, dy
μνμ’μ° νμμ μν μ’ν λ°°μ΄ - que
bfs νμ μ€ μλ‘κ² νμν μ’νκ°κ³Ό λ²½μ λΆμλμ§ μ¬λΆλ₯Ό μ μ₯ν λ±
(xμ’ν, yμ’ν, λ²½μ λΆμμ μλμ§ μ¬λΆ(λΆμμ μμΌλ©΄ 0, λΆμμ§ μμμΌλ©΄ 1)) - visited
μ λ ₯λλ 맡과 κ°μ ν¬κΈ°μ λ°°μ΄μΈλ°, μ리λ§λ€ λ²½μ λΆμμ μλμ§ μλμ§μ λν κ²½μ°λ₯Ό
λλ μ λ°©λ¬Έ 체ν¬λ₯Ό νκΈ° μν΄ 3μ°¨μ λ°°μ΄λ‘ νμ₯μμΌμ λ§λ€μ΄μ£Όμλ€.
([][][0] μλ¦¬κ° 0μ΄ μλλ©΄ λ²½μ λΆμ μ μκ³ , [][][1] μλ¦¬κ° 0μ΄ μλλ©΄ λΆμμ μλ€λ λ»)
[ νμ΄ μ€λͺ ]
- bfs νμ μ , 첫 λ²μ§Έ μ리μμλ λΉμ°ν λ²½μ λΆμμ§ μμΌλ―λ‘ queμ {0, 0, 1}μ μΆκ°νκ³ ,
visitedμλ λ²½μ λΆμμ§ μλ μλ¦¬μΈ [0][0][1]μ 1μ μ μ₯ν΄μ£Όμλ€. - bfs λ©μλμμλ queκ° λΉμ΄μκ² λκΈ° μ κΉμ§ whileλ¬Έμ λ°λ³΅νλλ‘ νλλ°,
λ§μ½ x, yκ° λμ°© μ§μ μ μ’νκ°κ³Ό κ°μ μ returnνλλ‘ νλ€. (κ°μ₯ λΉ λ₯Έ λμ°©) - κ°μ§ μμ κ²½μ°μλ forλ¬Έμ μ΄μ©νμ¬ μνμ’μ°λ₯Ό νμνλ€.
visited λ°°μ΄μ ν΄λΉνλ μ리μ 1μ΄ μ μ₯λμ΄μλ€λ©΄ μ΄λ―Έ λ°©λ¬Έν μ리λΌλ λ»μ΄λ―λ‘
λ°λ‘ 쑰건μ μ ν΄μ£Όμ§ μμκ³ , 0μ΄ μ μ₯λ κ²½μ°μλ§ μλ‘μ΄ νμμ ν΄μ£Όμλ€. - λ§μ½ map[nx][ny]μ 1(λ²½)μ΄ μ μ₯λμ΄μλλ°, zκ° 1μ΄λΌλ©΄ λ²½μ λΆμ μ μλ€λ λ»μ΄λ―λ‘,
λ²½μ λΆμκ³ λ€μ μλ¦¬λ‘ λμκ° μ μλ€λ μλ―Έμ΄λ€. λ°λΌμ μ°λ¦¬λ λ²½μ λΆμ κ²μ΄λ©°,
ν λ² λΆμλ€λ κ²μ νμνκΈ° μν΄ visited[nx][ny][0]μ visited[x][y][1] + 1μ μ μ₯νλ€. - λ§μ½ map[nx][ny]μ 0μ΄ μ μ₯λμ΄μλ€λ©΄ μ΄μ μ λ²½μ λΆμλ μλΆμλ (zκ° 0μ΄λ 1μ΄λ )
무쑰건 λ€μ μλ¦¬λ‘ μ΄λν μ μλ€λ μλ―Έμ΄λ€. λ°λΌμ μ°λ¦¬λ λ€μμΌλ‘ μ΄λν κ²μ΄λ©°,
visited[nx][ny][z]μ visited[x][y][z] + 1μ μ μ₯ν΄μ£Όμλ€. - while λ°λ³΅μ΄ λλ λκΉμ§ bfs ν¨μκ° λ¦¬ν΄λμ§ μμλ€λ©΄ λμ°© λΆκ°λ‘ νλ¨, -1μ 리ν΄νλ€.
π‘ νΌλλ°±
- visited λ°°μ΄κ³Ό que μμμ λν νλ¨μ΄ 볡μ‘ν΄μ ν·κ°λ¦¬κΈ°λ νμ§λ§ μ΄λ ΅μ§ μμ λ¬Έμ μλ€.
'2οΈβ£ Java > Problem Solving' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[Java Algorithm] λΆ BOJ #5427 (0) | 2022.08.08 |
---|---|
[Java Algorithm] μ¨λ°κΌμ§ 3 BOJ #13549 (0) | 2022.08.08 |
[Java Algorithm] μ κΈ°ν μμ BOJ #2023 (0) | 2022.08.05 |
[Java Algorithm] ν BOJ #2493 (0) | 2022.08.05 |
[Java Algorithm] ν±λλ°ν΄ BOJ #14891 (0) | 2022.08.03 |
λκΈ