
import java.io.*;
import java.util.*;
class Solution {
static class Node{
int x,y,sum;
public Node(int x,int y,int sum){
this.x=x;
this.y=y;
this.sum=sum;
}
}
static int[] dx={0,0,1,-1};
static int[] dy={1,-1,0,0};
public int solution(int[][] maps) {
return bfs(maps);
}
static int bfs(int[][] maps){
Queue<Node> q=new LinkedList<>();
q.offer(new Node(0,0,0));
boolean[][] visited=new boolean[maps.length][maps[0].length];
visited[0][0]=true;
while(!q.isEmpty()){
Node cur=q.poll();
int x=cur.x;
int y=cur.y;
int sum=cur.sum+1;
if(x==maps.length-1 && y==maps[0].length-1){
return sum;
}
for(int i=0;i<4;i++){
int nx=x+dx[i];
int ny=y+dy[i];
if(isEdge(nx,ny,maps) || visited[nx][ny] || maps[nx][ny]==0) continue;
q.offer(new Node(nx,ny,sum));
visited[nx][ny]=true;
// System.out.println(nx+", "+ny+", "+sum);
}
}
return -1;
}
static boolean isEdge(int x,int y, int[][] maps){
return (x<0 || y<0 || x>=maps.length || y>=maps[0].length);
}
}
문제를 보자마자 어떻게 풀어야하는지 떠올랐지만 sum+1 처리에서 q.offer부분에서 해주니 틀려서 q.poll부분에서 해주었더니 맞았다.
기본적인 클래스, 큐, bfs 사용 문제였다.