๋ฌธ์
ํด๋น ํฌ์คํ ์ ๋ฐฑ์ค์ 2206๋ฒ ๋ฒฝ ๋ถ์๊ณ ์ด๋ํ๊ธฐ ์ ์ ๊ทผ๊ณผ ํด๊ฒฐ ๋ฐฉ๋ฒ์ ์ค๋ช ํ ๊ธ ์ ๋๋ค.
์ ๋ต ์์ค ์ฝ๋๋ฅผ ํ์ธํ์๋ ค๋ฉด solve url ์์ ํ์ธ ๊ฐ๋ฅํฉ๋๋ค.
2206๋ฒ: ๋ฒฝ ๋ถ์๊ณ ์ด๋ํ๊ธฐ
N×M์ ํ๋ ฌ๋ก ํํ๋๋ ๋งต์ด ์๋ค. ๋งต์์ 0์ ์ด๋ํ ์ ์๋ ๊ณณ์ ๋ํ๋ด๊ณ , 1์ ์ด๋ํ ์ ์๋ ๋ฒฝ์ด ์๋ ๊ณณ์ ๋ํ๋ธ๋ค. ๋น์ ์ (1, 1)์์ (N, M)์ ์์น๊น์ง ์ด๋ํ๋ ค ํ๋๋ฐ, ์ด๋ ์ต๋จ ๊ฒฝ๋ก
www.acmicpc.net
์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ์ด๋ค ๋ฐฉ์์ผ๋ก ์ ๊ทผํด์ผ ํ๋์ง๋ฅผ ๋จผ์ ์๊ฐํด๋ณด์.
๋ฌธ์ ์ ๊ทผ
์ต๋จ ๊ฑฐ๋ฆฌ๋ผ BFS๋ก ํด๊ฒฐํ ์ ์๋ ๋ฌธ์ ์ด๋ค.
์ง๊ธ๊น์ง ํด๊ฒฐํ๋ BFS ์์๋ ์ ์ผ ์ดํด๊ฐ ํ๋ค์๋ ๋ฌธ์ ๋ค.
์ฒ์์ ๋ธ๋ฃจํธํฌ์ค๋ก ๋ฒฝ์ ๋ซ๊ณ bfs ๋ฅผ ์ํํ๋๋ฐ ๊ณ์ํด์ ์๊ฐ์ด๊ณผ๊ฐ ๋์์ ๊ฒฐ๊ตญ ๋ธ๋ก๊ทธ์ ํ์ ๋น๋ ธ๋ ๋ฌธ์ ๋ค.
์ ๋ต ์ฝ๋
public class Main {
private static int n;
private static int m;
private static int[][] visited;
private static int[][] arr;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
String[] nm = br.readLine().split(" ");
n = Integer.parseInt(nm[0]);
m = Integer.parseInt(nm[1]);
visited = new int[n][m];
arr = new int[n][m];
for(int i = 0; i < n; i++) {
String[] s = br.readLine().split("");
for(int j = 0; j < m; j++) {
arr[i][j] = Integer.parseInt(s[j]);
visited[i][j] = Integer.MAX_VALUE;
}
}
bw.write(String.valueOf(bfs()));
bw.flush();
bw.close();
}
private static int bfs() {
int[] xPos = {1, -1, 0, 0};
int[] yPos = {0, 0, 1, -1};
Queue<Position> queue = new LinkedList<>();
queue.add(new Position(0, 0, 1, 0));
visited[0][0] = 0;
while(!queue.isEmpty()) {
Position front = queue.remove();
if(front.x == m - 1 && front.y == n - 1) return front.depth;
for(int i = 0; i < 4; i++) {
int xx = front.x + xPos[i];
int yy = front.y + yPos[i];
if(!(0 <= xx && xx < m && 0 <= yy && yy < n)) continue;
if(visited[yy][xx] > front.breakWall) { // ๋ฐฉ๋ฌธํ์ง ์๋ ๋
ธ๋๋ง
if(arr[yy][xx] == 0) {
queue.add(new Position(xx, yy, front.depth + 1, front.breakWall));
visited[yy][xx] = front.breakWall;
}else {
if(front.breakWall == 0) {
queue.add(new Position(xx, yy, front.depth + 1, front.breakWall + 1));
visited[yy][xx] = front.breakWall + 1;
}
}
}
}
}
return -1;
}
private static class Position {
int x, y, depth, breakWall;
Position(int x, int y, int depth, int breakWall) {
this.x = x;
this.y = y;
this.depth = depth;
this.breakWall = breakWall;
}
}
}
์ ๋ต ์์ค ์ฝ๋๋ฅผ ํ์ธํ์๋ ค๋ฉด solve url ์์ ํ์ธ ๊ฐ๋ฅํฉ๋๋ค.
'๐ป Computer Science > - Data Structure, Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์๊ณ ๋ฆฌ์ฆ PS] ๋ฐฑ์ค 15729๋ฒ ๋ฐฉํ์ถ ์๋ฐ ๋ฌธ์ ํ์ด (0) | 2021.12.08 |
---|---|
[์๊ณ ๋ฆฌ์ฆ PS] ๋ฐฑ์ค 1946๋ฒ ์ ์ ์ฌ์ ์๋ฐ ๋ฌธ์ ํ์ด (0) | 2021.08.19 |
[์๊ณ ๋ฆฌ์ฆ PS] 2589๋ฒ ๋ณด๋ฌผ์ฌ ์๋ฐ ๋ฌธ์ ํ์ด (0) | 2021.08.14 |
[์๊ณ ๋ฆฌ์ฆ PS] ๋ฐฑ์ค 9019๋ฒ DSLR ์๋ฐ ๋ฌธ์ ํ์ด (0) | 2021.08.13 |
[์๊ณ ๋ฆฌ์ฆ PS] ๋ฐฑ์ค 5014๋ฒ ์คํํธ๋งํฌ ์๋ฐ ๋ฌธ์ ํ์ด (0) | 2021.08.07 |
๋๊ธ