π‘ λ¬Έμ
N×Mν¬κΈ°μ λ°°μ΄λ‘ ννλλ λ―Έλ‘κ° μλ€.

λ―Έλ‘μμ 1μ μ΄λν μ μλ μΉΈμ λνλ΄κ³ , 0μ μ΄λν μ μλ μΉΈμ λνλΈλ€. μ΄λ¬ν λ―Έλ‘κ° μ£Όμ΄μ‘μ λ, (1, 1)μμ μΆλ°νμ¬ (N, M)μ μμΉλ‘ μ΄λν λ μ§λμΌ νλ μ΅μμ μΉΈ μλ₯Ό ꡬνλ νλ‘κ·Έλ¨μ μμ±νμμ€. ν μΉΈμμ λ€λ₯Έ μΉΈμΌλ‘ μ΄λν λ, μλ‘ μΈμ ν μΉΈμΌλ‘λ§ μ΄λν μ μλ€.
μμ μμμλ 15μΉΈμ μ§λμΌ (N, M)μ μμΉλ‘ μ΄λν μ μλ€. μΉΈμ μ λμλ μμ μμΉμ λμ°© μμΉλ ν¬ν¨νλ€.
μ λ ₯
첫째 μ€μ λ μ μ N, M(2 ≤ N, M ≤ 100)μ΄ μ£Όμ΄μ§λ€. λ€μ Nκ°μ μ€μλ Mκ°μ μ μλ‘ λ―Έλ‘κ° μ£Όμ΄μ§λ€. κ°κ°μ μλ€μ λΆμ΄μ μ λ ₯μΌλ‘ μ£Όμ΄μ§λ€.
μΆλ ₯
첫째 μ€μ μ§λμΌ νλ μ΅μμ μΉΈ μλ₯Ό μΆλ ₯νλ€. νμ λμ°©μμΉλ‘ μ΄λν μ μλ κ²½μ°λ§ μ λ ₯μΌλ‘ μ£Όμ΄μ§λ€.
ν΄κ²° λ°©λ²:
μ΄ λ¬Έμ λ DFSμ BFS μκ³ λ¦¬μ¦μ μ΄μ©ν΄μ ν μ μλ€. DFS μκ³ λ¦¬μ¦μ μ΅λ¨κ±°λ¦¬λ₯Ό μ°ΎμΌλ €λ©΄ μμ νμμ νκ³ κ·Έμ€μμ κ°μ₯ μμ κ°μ μ νν΄μΌ νλλ° κ²½λ‘κ° μμ£Ό λ§μ μ μμΌλ―λ‘ μκ° λ³΅μ‘λκ° λ§€μ° μ»€μ§λ€. λ°λ©΄ BFSλ μ΅λ¨κ±°λ¦¬λ₯Ό 보μ₯νκΈ° λλ¬Έμ μ΄λ¬ν λ¬Έμ λ€ (μ΅λ¨κ±°λ¦¬ ꡬνκΈ°)μ BFSλ‘ νΈλ κ²μ΄ μ’λ€.
μ΄ λ¬Έμ λ₯Ό νκΈ° μν΄μλ λ―Έλ‘μ κ° μΉΈμ μ μ μΌλ‘ μκ°νκ³ κ° μΉΈ μ¬μ΄μ μ°κ²°κ΄κ³λ₯Ό κ·Έλνλ‘ λνλ΄μΌ νλ€. κ·Έ λ€μ BFS μκ³ λ¦¬μ¦μ μ΄μ©ν΄μ μμμ μμλΆν° λμ°©μ κΉμ§μ μ΅λ¨κ±°λ¦¬λ₯Ό ꡬνλ©΄ λλ€.
λ¨Όμ λ―Έλ‘μ μ 보λ₯Ό μ λ ₯λ°μμ 2μ°¨μ λ°°μ΄μ μ μ₯νλ€. BFSλ₯Ό μ€ννλ©΄μ νμ¬κΉμ§ μ΄λν μΉΈ μλ₯Ό μ μ₯νλ€. μμμ μμλΆν° BFSλ₯Ό μ€ννλ©΄μ λμ°©μ μ λλ¬ν λκΉμ§ μ΄λν μΉΈ μλ₯Ό μ μ₯νλ©΄ λλλ°, μ΄ λ λμ°©μ μ λλ¬νμ λμ μ΄λν μΉΈ μκ° μ΅μκ°μ΄ λλ€.
μκ³ λ¦¬μ¦:
BFS
μκ°λ³΅μ‘λ:
O(NM)
μ½λ μ€ν μμ:
- μ λ ₯κ°μΌλ‘ λ°μ λ―Έλ‘λ₯Ό 2μ°¨μ λ°°μ΄λ‘ μ μ₯
- μμμ (0, 0)μμ BFS μκ³ λ¦¬μ¦μ μμ
- νμ μμμ μ λ£κ³ λ°©λ¬Ένμμ νμ
- νκ° λΉ λκΉμ§ λ€μμ λ°λ³΅
- νμμ μ μ μ νλ κΊΌλΈλ€.
- κΊΌλΈ μ μ μμ κ° μ μλ λͺ¨λ μ μ μ νμ λ£κ³ λ°©λ¬Ένμμ νμ
- μ΄λ, κ° μ μ κΉμ§μ 거리λ₯Ό μ΄μ μ μ κΉμ§μ 거리 + 1λ‘ κ³μ°
- λμ°©μ (n-1, m-1)κΉμ§μ μ΅λ¨κ±°λ¦¬ μΆλ ₯
π 리뷰
λ―Έλ‘λ₯Ό 2μ°¨μ λ°°μ΄λ‘ λ°μμ κ° μΉΈμ μ μ μΌλ‘ μκ°νκ³ κ° μΉΈ μ¬μ΄μ μ°κ²°κ΄κ³λ₯Ό κ·Έλνλ‘ λνλ΄λ €κ³ λ Έλ ₯νλ€. κ·Έ λ€μ BFS μκ³ λ¦¬μ¦μ μ΄μ©ν΄μ μμμ μμλΆν° λμ°©μ κΉμ§μ μ΅λ¨κ±°λ¦¬λ₯Ό ꡬνλ κ² μκ°μ΄ κ±Έλ Έλ€.
π λ΄ λ΅μ
import java.util.*;
public class boj2178 { // λ―Έλ‘ νμ μ€λ²1
static int n, m;
static int[][] maze; // λ―Έλ‘μ μ 보λ₯Ό μ μ₯νλ 2μ°¨μ λ°°μ΄
static boolean[][] visited; // λ°©λ¬Έ μ¬λΆλ₯Ό μ μ₯νλ 2μ°¨μ λ°°μ΄
static int[] dx = {-1, 0, 1, 0}; // μ, μ°, ν, μ’ μμλ‘ μ΄λνκΈ° μν λ°°μ΄
static int[] dy = {0, 1, 0, -1};
public static void bfs(int x, int y) {
Queue<int[]> q = new LinkedList<>(); // BFSλ₯Ό μν ν
q.offer(new int[]{x, y}); // μμμ μ νμ μΆκ°
visited[x][y] = true; // μμμ λ°©λ¬Έ μ²λ¦¬
while (!q.isEmpty()) { // νκ° λΉμ΄μμ§ μμ λμ λ°λ³΅
int[] point = q.poll(); // νμμ μ νλλ₯Ό κΊΌλ΄μ
for (int i = 0; i < 4; i++) { // μ, μ°, ν, μ’ μμλ‘ μ΄λν μ μλμ§ νμΈ
int nx = point[0] + dx[i]; // μ΄λν μμΉμ x μ’ν
int ny = point[1] + dy[i]; // μ΄λν μμΉμ y μ’ν
if (nx < 0 || nx >= n || ny < 0 || ny >= m) { // λ―Έλ‘λ₯Ό λ²μ΄λ κ²½μ°
continue; // λ€μ μ΄λ λ°©ν₯ νμΈ
}
if (maze[nx][ny] == 0) { // μ΄λν μ μλ κ²½μ° (λ²½μΈ κ²½μ°)
continue; // λ€μ μ΄λ λ°©ν₯ νμΈ
}
if (!visited[nx][ny]) { // λ°©λ¬Ένμ§ μμ κ²½μ°
visited[nx][ny] = true; // λ°©λ¬Έ μ²λ¦¬
maze[nx][ny] = maze[point[0]][point[1]] + 1; // νμ¬κΉμ§ μ΄λν μΉΈ μλ₯Ό μ μ₯
q.offer(new int[]{nx, ny}); // νμ μΆκ°
}
}
}
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
n = sc.nextInt(); // λ―Έλ‘μ μΈλ‘ κΈΈμ΄
m = sc.nextInt(); // λ―Έλ‘μ κ°λ‘ κΈΈμ΄
maze = new int[n][m]; // λ―Έλ‘ μ 보λ₯Ό μ μ₯ν λ°°μ΄ μ΄κΈ°ν
visited = new boolean[n][m]; // λ°©λ¬Έ μ¬λΆλ₯Ό μ μ₯ν λ°°μ΄ μ΄κΈ°ν
for (int i = 0; i < n; i++) { // λ―Έλ‘ μ 보 μ
λ ₯ λ°κΈ°
String row = sc.next(); // ν μ€μ© μ
λ ₯ λ°μ
for (int j = 0; j < m; j++) { // κ° μΉΈμ λν΄
maze[i][j] = row.charAt(j) - '0'; // λ¬Έμμ΄μ μ«μλ‘ λ³ννμ¬ λ―Έλ‘ λ°°μ΄μ μ μ₯
}
}
bfs(0, 0); // μμμ (0, 0)μμ BFS μμ
System.out.println(maze[n - 1][m - 1]); // λμ°©
}
}
'π Algorithm > BOJ' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[λ°±μ€] μμΈνΈμ€ λ¬Έμ 0 (JAVA) (0) | 2023.04.11 |
---|---|
[λ°±μ€] 2828 μ¬κ³Ό λ΄κΈ° κ²μ(JAVA) (0) | 2023.04.02 |
[λ°±μ€] 1926 κ·Έλ¦Ό(JAVA) (0) | 2023.03.21 |
8958 (0) | 2021.08.18 |
1110 (0) | 2021.08.16 |