https://school.programmers.co.kr/learn/courses/30/lessons/1844
출발지에서 목적지까지 최단거리가 몇칸걸리냐를 찾는 문제이다
bfs로 쉽게 풀었다
import java.io.*;
import java.util.*;
class Node
{
int r;
int c;
public Node(int r, int c)
{
this.r = r;
this.c = c;
}
}
class Solution {
public int solution(int[][] maps) {
int answer = 0;
answer = bfs(maps, new Node(0, 0));
return answer;
}
static int bfs(int[][] maps, Node start)
{
int m = maps.length;
int n = maps[0].length;
int[][] visit = new int[m][n];
for(int i = 0; i < m; ++i)
{
Arrays.fill(visit[i], -1);
}
Queue<Node> que = new LinkedList<>();
que.add(start);
visit[start.r][start.c] = 1;
int[][] dir = {{-1, 0}, {0, 1}, {1, 0}, {0, -1}};
while(false == que.isEmpty())
{
Node cur = que.poll();
if(cur.r == (m-1) && cur.c == (n-1))
break;
for(int i = 0; i < 4; ++i)
{
int nr = cur.r + dir[i][0];
int nc = cur.c + dir[i][1];
if(nr < 0 || nr >= m || nc < 0 || nc >= n)
continue;
if(visit[nr][nc] != -1)
continue;
if(maps[nr][nc] == 0)
continue;
que.add(new Node(nr, nc));
visit[nr][nc] = visit[cur.r][cur.c]+1;
}
}
return visit[m-1][n-1];
}
}