728x90
이제 DFS,BFS에 대한 간단한 문제들은 자리를 잡은 느낌이다. 이번 문제도 간단한 BFS문제였고, 2차원 배열에서 돌아가는 일반 문제와 달리 3차원 공간이라 재미있었다. 하지만 결국은 축이 하나 더 들어간 노가다;;
그리고 출력하는 문자가 틀릴 경우 바로 틀렸다고 안뜨고, 33%쯤에서 뜬다;;; 조심하자!
package week5;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.LinkedList;
import java.util.Queue;
public class Day3_BOJ6593 {
static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
static char map[][][];
static boolean c[][][];
static Pos start;
static Queue<Pos> q = new LinkedList<Pos>();
static int dh[] = {0,0,0,0,1,-1};
static int dy[] = {1,-1,0,0,0,0};
static int dx[] = {0,0,-1,1,0,0};
static int L,R,C,time;
static class Pos{
int x,y,h,time;
public Pos(int h, int y, int x, int time) {
this.x = x;
this.y = y;
this.h = h;
this.time = time;
}
@Override
public String toString() {
return "Pos [x=" + x + ", y=" + y + ", h=" + h + "]";
}
}
private static void bfs() {
q.add(start);
c[start.h][start.y][start.x] = true;
while(!q.isEmpty()) {
Pos cur = q.poll();
int oh = cur.h;
int oy = cur.y;
int ox = cur.x;
int ot = cur.time;
for(int d=0; d<6; d++) {
int nh = oh+dh[d];
int ny = oy+dy[d];
int nx = ox+dx[d];
if(nh>=0 && nh<L && ny>=0 && ny<R && nx>=0 && nx<C && !c[nh][ny][nx] && map[nh][ny][nx]!='#') {
if(map[nh][ny][nx]=='E') {
time = Math.min(time, ot+1);
}
if(map[nh][ny][nx]=='.') {
c[nh][ny][nx]=true;
q.offer(new Pos(nh,ny,nx,ot+1));
}
}
}
}
}
public static void main(String[] args) throws IOException {
while(true) {
time=Integer.MAX_VALUE;
q = new LinkedList<Pos>();
String[] lrcInfo = br.readLine().split(" ");
L = Integer.parseInt(lrcInfo[0]);
R = Integer.parseInt(lrcInfo[1]);
C = Integer.parseInt(lrcInfo[2]);
if(L==0 && R==0 && C==0) {
break;
}
map = new char[L][R][C];
c = new boolean[L][R][C];
for(int i=0; i<L; i++) {
for(int j=0; j<R; j++) {
String[] s = br.readLine().split("");
for(int k=0; k<C; k++) {
map[i][j][k] = s[k].charAt(0);
if(map[i][j][k]=='S') {
start = new Pos(i, j, k, 0);
}
}
}
br.readLine();
}
bfs();
if(time<Integer.MAX_VALUE) {
System.out.println("Escaped in "+time+ " minute(s).");
}else {
System.out.println("Trapped!");
}
}
}
}
728x90
'[Algorithms] > [Problems]' 카테고리의 다른 글
BOJ. 20057번. 마법사 상어와 토네이도 (0) | 2021.03.10 |
---|---|
BOJ. 20056번. 마법사 상어와 파이어볼 (0) | 2021.03.10 |
BOJ. 17406번. 배열 돌리기 4 (0) | 2021.02.14 |
BOJ. 16935번. 배열 돌리기 3 (0) | 2021.02.14 |
BOJ. 16927번. 배열 돌리기 2 (0) | 2021.02.14 |