https://www.acmicpc.net/problem/2178
BFS를 공부할 때 살펴본 문제와 같은 문제였다. (https://www.youtube.com/watch?v=7C9RgOcvkvo)
코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.LinkedList;
import java.util.Queue;
import java.util.StringTokenizer;
class Node{
private int x;
private int y;
public Node(int x, int y) {
this.x = x;
this.y = y;
}
public int getX() {
return this.x;
}
public int getY() {
return this.y;
}
}
public class Baek2178 { // BFS
public static int[][] maze = new int[100][100];
public static int dx[] = {-1, 1, 0, 0};
public static int dy[] = {0, 0 ,-1, 1};
public static int N = 0, M = 0;
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
N = Integer.parseInt(st.nextToken());
M = Integer.parseInt(st.nextToken());
for(int i = 0; i < N; i++) {
String miro = br.readLine();
for(int j = 0; j < M; j++)
maze[i][j] = miro.charAt(j) - '0';
}
System.out.println(arrive_BFS(0, 0));
}
public static int arrive_BFS(int x, int y) {
Queue<Node> queue = new LinkedList<>();
queue.offer(new Node(x, y));
while(!queue.isEmpty()) {
Node node = queue.poll(); // queue에서 꺼낸다
x = node.getX();
y = node.getY();
for(int i = 0; i < 4; i++) {
int nx = x + dx[i];
int ny = y + dy[i];
if(nx <= -1 || nx >= N || ny <= -1 || ny >= M) continue;
if(maze[nx][ny] == 0) continue;
if(maze[nx][ny] == 1) {
maze[nx][ny] = maze[x][y] + 1;
queue.offer(new Node(nx, ny));
}
}
}
return maze[N - 1][M - 1];
}
}
Queue에 x, y 쌍을 저장하기 위해 Node라는 클래스를 만들었다.
어렵구만
'알고리즘 > 백준' 카테고리의 다른 글
[BaekJoon] 백준 4963번 _ 섬의 개수 for JAVA _ DFS 알고리즘 (0) | 2022.01.24 |
---|---|
[BaekJoon] 백준 11724번 _ 연결 요소의 개수 for JAVA _ DFS 알고리즘 (0) | 2022.01.24 |
[BaekJoon] 백준 1012번 _ 유기농 배추 for JAVA _ DFS 알고리즘 (0) | 2022.01.21 |
[BaekJoon] 백준 2667번 _ 단지 번호 붙이기 for JAVA _ DFS 알고리즘 (0) | 2022.01.20 |
[BaekJoon] 백준 2606번 _ 바이러스 for JAVA _ DFS 알고리즘 (0) | 2022.01.20 |