문제 하나를 풀었다.
https://www.acmicpc.net/problem/2178
쉬우면서 어려운 문제였다.
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.LinkedList;
import java.util.Queue;
import java.util.StringTokenizer;
public class Main {
static StringTokenizer st;
static int[] dx= {-1,1,0,0};
static int[] dy= {0,0,-1,1};
static int count=0;
static int n,m;
static int[][] maze;
static boolean[][] visited;
public static void main(String[] args) throws IOException {
BufferedReader br= new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw= new BufferedWriter(new OutputStreamWriter(System.out));
st= new StringTokenizer(br.readLine());
n= Integer.parseInt(st.nextToken());
m= Integer.parseInt(st.nextToken());
maze= new int[n][m];
visited= new boolean[n][m];
for(int i=0;i<n;i++) {
String st=br.readLine();
for(int j=0;j<m;j++) {
maze[i][j]=st.charAt(j)-'0';
}
}
visited[0][0]=true;
bfs(0,0);
bw.write(String.valueOf(maze[n-1][m-1]));
bw.flush();
bw.close();
}
public static void bfs(int x,int y) {
Queue<int[]> q =new LinkedList<int[]>();
q.add(new int[] {x,y});
while(!q.isEmpty()) {
int now[]=q.poll();
int nowx= now[0];
int nowy=now[1];
for(int i=0;i<4;i++) {
int nx=nowx+dx[i];
int ny=nowy+dy[i];
if(nx<0 || ny<0||nx>=n||ny>=m) {
continue;
}
if(visited[nx][ny]||maze[nx][ny]==0) {
continue;
}
q.add(new int[] {nx,ny});
maze[nx][ny]=maze[nowx][nowy]+1;
visited[nx][ny]=true;
}
}
}
}
결과 배열을 하나하나 찍으면 이렇게 나온다.