๋ฌธ์ (์ถ์ฒ: https://www.acmicpc.net/problem/14442)
< ๋ฒฝ ๋ถ์๊ณ ์ด๋ํ๊ธฐ 2 >
๋ฌธ์ ํ์ด
ํ์ฌ ์์น์์ ์ํ์ข์ฐ๋ก ์ด๋ํ๋ฉด์ ๋ฒฝ์ด ์๋ค๋ฉด ์ด๋, ๋ฒฝ์ด ์๋ค๋ฉด ํ์ฌ๊น์ง ๋ถ์ ๋ฒฝ ๊ฐ์๋ฅผ ๋ณด๊ณ ๋ถ์๊ณ ์ด๋ํ๋ค.
my solution (Java)
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.LinkedList;
import java.util.Queue;
import java.util.StringTokenizer;
public class _14442_ { // ๋ฒฝ ๋ถ์๊ณ ์ด๋ํ๊ธฐ 2
static int arr[][], n, m, k;
static boolean visited[][][];
static class Pair {
int x, y, d, w;
public Pair(int x, int y, int d, int w) {
this.x = x;
this.y = y;
this.d = d;
this.w = w;
}
}
public static void main(String[] args) throws IOException {
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(bf.readLine());
n = Integer.parseInt(st.nextToken());
m = Integer.parseInt(st.nextToken());
k = Integer.parseInt(st.nextToken());
arr = new int[n][m];
visited = new boolean[k + 1][n][m];
for (int i = 0; i < n; i++) {
String str = bf.readLine();
for (int j = 0; j < m; j++) {
arr[i][j] = str.charAt(j) - '0';
}
}
if (n == 1 && m == 1) {
System.out.println(1);
} else {
System.out.println(bfs());
}
}
private static int bfs() {
Queue<Pair> queue = new LinkedList<>();
queue.add(new Pair(0, 0, 1, 0));
visited[0][0][0] = true;
int dx[] = { -1, 1, 0, 0 };
int dy[] = { 0, 0, -1, 1 };
while (!queue.isEmpty()) {
Pair pair = queue.poll();
for (int i = 0; i < 4; i++) {
int x = pair.x + dx[i];
int y = pair.y + dy[i];
if (x >= 0 && x < n && y >= 0 && y < m) {
if (arr[x][y] == 0 && !visited[pair.w][x][y]) {
if (x == n - 1 && y == m - 1) {
return pair.d + 1;
}
visited[pair.w][x][y] = true;
queue.add(new Pair(x, y, pair.d + 1, pair.w));
} else if (arr[x][y] == 1 && pair.w + 1 <= k && !visited[pair.w + 1][x][y]) {
if (x == n - 1 && y == m - 1) {
return pair.d + 1;
}
visited[pair.w + 1][x][y] = true;
queue.add(new Pair(x, y, pair.d + 1, pair.w + 1));
}
}
}
}
return -1;
}
}
๋ณ์)
n, m, k : ๋งต ํฌ๊ธฐ, ๋ถ์ ์ ์๋ ๋ฒฝ์ ์
arr : ๋งต
visited : ๋ฐฉ๋ฌธ ์ฌ๋ถ
Pair
ํ์ฌ ์์น์ ์ด๋ ๊ฑฐ๋ฆฌ, ๋ถ์ ๋ฒฝ์ ๊ฐ์๋ฅผ ๊ด๋ฆฌํ๋ค.
Main
๋งต ํฌ๊ธฐ n, m๊ณผ ๋ถ์ ์ ์๋ ๋ฒฝ์ ์์ธ k๋ฅผ ์ ๋ ฅ๋ฐ๋๋ค. ๋งต ์ ๋ณด๋ฅผ ์ ๋ ฅ๋ฐ์ arr์ ์ ์ฅํ๋ค. ๋ง์ฝ n๊ณผ m ๊ฐ์ด 1์ด๋ผ๋ฉด ์ต๋จ ๊ฒฝ๋ก๋ 1์ด๋ฏ๋ก 1์ ์ถ๋ ฅํ๊ณ , ๊ทธ๋ ์ง ์๋ค๋ฉด bfs() ํจ์์ ๋ฐํ๊ฐ์ ์ถ๋ ฅํ๋ค.
bfs()
ํ์ ์์์์น (0,0)๊ณผ ์ด๋๊ฑฐ๋ฆฌ 1, ๋ถ์ ๋ฒฝ์ ๊ฐ์ 0์ ๊ฐ์ง Pair ๊ฐ์ฒด๋ฅผ ์ ์ฅํ๋ค. ๋ถ์ ๋ฒฝ์ ๊ฐ์ 0๊ณผ ํ์ฌ ์์น (0,0)์ ๋ฐฉ๋ฌธ์ฒ๋ฆฌํ๋ค. ํ๊ฐ ๋น ๋๊น์ง ๋ค์ ๊ณผ์ ์ ๋ฐ๋ณตํ๋ค.
์ํ์ข์ฐ ํ์ ํ ๋งต ๋ฒ์ ์์ด๋ผ๋ฉด
1) ์ด๋ํ ์ ์๋ ๊ณณ์ด๊ณ ์์ง ๋ฐฉ๋ฌธํ์ง ์์ ๊ณณ์ด๋ผ๋ฉด -> ๋ฐฉ๋ฌธ์ฒ๋ฆฌ ๋ฐ ํ์ ์ ์ฅ
2) ๋ฒฝ์ด๊ณ ์์ง k๊ฐ์ ๋ฒฝ์ ์ ๋ถ์๊ณ ์์ง ๋ฐฉ๋ฌธํ์ง ์์ ๊ณณ์ด๋ผ๋ฉด -> ๋ฐฉ๋ฌธ ์ฒ๋ฆฌ ๋ฐ ํ์ ์ ์ฅ
์ด๋, ๋ ๋ค (n-1, m-1) ์์น์ ๋์ฐฉํ๋ค๋ฉด ํ์ฌ ์ด๋ ๊ฑฐ๋ฆฌ +1์ ๋ฐํํ๋ค.
(n-1, m-1)์ ๋์ฐฉํ์ง ๋ชปํ๋ค๋ฉด -1์ ๋ฐํํ๋ค.

'๐Algorithm > ๐ฅBaekjoon' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [Baekjoon] 2294_๋์ 2 (0) | 2026.01.07 |
|---|---|
| [Baekjoon] 11054_๊ฐ์ฅ ๊ธด ๋ฐ์ดํ ๋ ๋ถ๋ถ ์์ด (0) | 2026.01.06 |
| [Baekjoon] 25101_Robin Hood (0) | 2025.12.18 |
| [Baekjoon] 27589_Streets Ahead (0) | 2025.12.17 |
| [Baekjoon] 6235_Argus (0) | 2025.12.16 |