[백준](Java) 2178 - 미로찾기

민지킴·2021년 4월 21일
0

백준

목록 보기
2/48
post-thumbnail

문제 링크

https://www.acmicpc.net/problem/2178

문제 풀이

bfs문제풀이 방식으로 접근했으며 한칸 이동할때마다 이전칸의 값에 +1을 해주며 진행했다.


코드

import java.util.*;

public class Main {


    static int[][] map;
    static int[] diry = {0, 1, -1, 0};// 상 하 좌 우
    static int[] dirx = {1, 0, 0, -1}; //상 하 좌 우
    static boolean[][] chk;
    static int n;
    static int m;

    public static class Node {
        int y;
        int x;

        public Node(int y, int x) {
            this.y = y;
            this.x = x;
        }
    }


    public static void main(String[] args) {

        Scanner sc = new Scanner(System.in);
        n = sc.nextInt();
        m = sc.nextInt();
        map = new int[n][m];
        chk = new boolean[n][m];
        for (int i = 0; i < n; i++) {
            String line = sc.next();
            for (int j = 0; j < line.length(); j++) {
                map[i][j] = Integer.parseInt(line.substring(j, j + 1));
            }
        }
        chk[0][0] = true;
        bfs(0, 0);
        System.out.println(map[n - 1][m - 1]);

    }

    public static void bfs(int y, int x) {
        Queue<Node> queue = new LinkedList<>();
        queue.add(new Node(y, x));

        while (!queue.isEmpty()) {
            Node now = queue.poll();
            for (int i = 0; i < 4; i++) {
                int now_y = now.y + diry[i];
                int now_x = now.x + dirx[i];
                if (0 <= now_y && now_y < n && 0 <= now_x && now_x < m) {
                    if (map[now_y][now_x] != 0 && !chk[now_y][now_x]) {
                        queue.add(new Node(now_y, now_x));
                        chk[now_y][now_x] = true;
                        map[now_y][now_x] = map[now.y][now.x] + 1;
                    }
                }
            }
        }

    }
}
profile
하루하루는 성실하게 인생 전체는 되는대로

0개의 댓글