[BOJ 2178] 미로 탐색 (java)

1 minute read

:pencil2: 문제 링크 https://www.acmicpc.net/problem/2178:pencil2:

문제풀이

package basics_600;

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 BOJ2178 {
	static int[][] board;
	static boolean[][] visited;
	static int[] dx = { -1, 0, 1, 0 };
	static int[] dy = { 0, 1, 0, -1 };
	static int N;
	static int M;

	public static void main(String[] args) throws IOException {
		// TODO Auto-generated method stub
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = new StringTokenizer(br.readLine(), " ");

		N = Integer.parseInt(st.nextToken());
		M = Integer.parseInt(st.nextToken());
		board = new int[N + 1][M + 1];
		visited = new boolean[N + 1][M + 1];

		// 미로 입력
		for (int i = 0; i < N; i++) {
			String[] temp = br.readLine().split("");
			for (int j = 0; j < M; j++) {
				board[i][j] = Integer.parseInt(temp[j]);
			}
		}

		bfs(0, 0);
		System.out.println(board[N-1][M-1]);

	}

	static void bfs(int x, int y) {
		//0,0 방문했으니까 true 
		visited[x][y] = true;

		//x,y묶어서 Queue 1개로 써도 되지만 알아보기 편해서 
		Queue<Integer> queueX = new LinkedList<>();
		Queue<Integer> queueY = new LinkedList<>();

		//방문한 x,y좌표 큐에 추가 
		queueX.offer(x);
		queueY.offer(y);

		//모든 노드 방문할때까지 
		while (!queueX.isEmpty()) {
			int tempX = queueX.poll();
			int tempY = queueY.poll();

			//방문한 노드에서 상,우,하,좌 순으로 탐색 
			for (int i = 0; i < 4; i++) {
				int moveX = tempX + dx[i];
				int moveY = tempY + dy[i];

				//board범위 내에 있고 
				if (moveX >= 0 && moveY >=0 && moveX < N && moveY < M) {
					//방문하지 않았으며 1이라서 이동 가능할때는 
					if (!visited[moveX][moveY] && board[moveX][moveY] == 1) {
						//방문 ! -> true 
						visited[moveX][moveY] = true;
						//큐에 방문할 x,y좌표 넣어준다 
						queueX.offer(moveX);
						queueY.offer(moveY);
						//방문할때마다 +1 씩 증가해서 nxm까지 더하기 
						board[moveX][moveY]= board[tempX][tempY]+1;

					}
				}
			}

		}

	}

}

Comments