본문 바로가기
코딩테스트/백준

[JAVA] 2178번 미로 탐색

by PEKAH 2021. 9. 21.

문제

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

 

2178번: 미로 탐색

첫째 줄에 두 정수 N, M(2 ≤ N, M ≤ 100)이 주어진다. 다음 N개의 줄에는 M개의 정수로 미로가 주어진다. 각각의 수들은 붙어서 입력으로 주어진다.

www.acmicpc.net

 

풀이

최소칸 수를 구하는 문제에는 bfs를 사용해 푸는 것이 더 효율적이다.

 

bfs 알고리즘을 적용하여 간단히 문제를 풀이하였다.

 

 

import java.awt.Point;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.LinkedList;
import java.util.Queue;
import java.util.StringTokenizer;

public class 미로탐색 {
	static int N, M;
	static int arr[][];
	static boolean visited[][];
	static int result[][];
	static int dx[] = {-1, 1, 0, 0};
	static int dy[] = {0, 0, -1, 1};
	
	public static void bfs() {
		Queue<Point> q = new LinkedList<>();
		result[0][0] = 1;
		
		q.offer(new Point(0, 0));
		visited[0][0] = true;
		
		while(!q.isEmpty()) {
			Point v = q.poll();
			
			for (int i = 0; i < 4; i++) {
				int xx = v.x + dx[i];
				int yy = v.y + dy[i];
				
				if (xx < 0 || xx >= N || yy < 0 || yy >= M) continue;
				if (xx == N - 1 && yy == M - 1) {
					result[xx][yy] = result[v.x][v.y]+ 1;
					return;
				}
				if (arr[xx][yy] == 1 && !visited[xx][yy]) {
					visited[xx][yy] = true;
					q.offer(new Point(xx, yy));
					result[xx][yy] = result[v.x][v.y]+ 1 ;
				}
			}
		}
	}
	
	public static void main(String[] args) throws Exception {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = new StringTokenizer(br.readLine());
		
		N = Integer.parseInt(st.nextToken());
		M = Integer.parseInt(st.nextToken());
		arr = new int[N][M];
		visited = new boolean[N][M];
		result = new int[N][M];
		
		for (int i = 0; i < N; i++) {
			String str = br.readLine();
			for (int j = 0; j < M; j++) {
				arr[i][j] = str.charAt(j) - '0';
			}
		}
		
		bfs();
		
		System.out.println(result[N-1][M-1]);
	}
}

 

 

'코딩테스트 > 백준' 카테고리의 다른 글

[JAVA] 1260번 DFS와 BFS  (0) 2021.09.20
[JAVA] 1012번 유기농 배추  (0) 2021.09.19
[JAVA] 14501번 퇴사  (0) 2021.08.30
[JAVA] 14888번 연산자 끼워넣기  (0) 2021.08.29
[JAVA] 2468번 안전 영역  (0) 2021.08.28

댓글