๋ฌธ์ 
ํด๋น ํฌ์คํ ์ ๋ฐฑ์ค์ 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 | 
๋๊ธ