boj)7569 - 토마토
2020. 10. 19. 14:11ㆍPS/boj
import java.io.*;
import java.util.*;
public class Main {
static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
static StringTokenizer st;
static Queue<int[]> q = new LinkedList<>();
static int row, col, h, nx, ny, nz;
static int[][][] map;
static boolean[][][] v;
static int[] dx = {0, 0, -1, 1, 0, 0}; // 위 아래 상 하 좌 우
static int[] dy = {0, 0, 0, 0, -1, 1};
static int[] dz = {1, -1, 0, 0, 0, 0};
public static void main(String[] args) throws IOException {
st = new StringTokenizer(br.readLine());
col = Integer.parseInt(st.nextToken());
row = Integer.parseInt(st.nextToken());
h = Integer.parseInt(st.nextToken());
map = new int[row][col][h];
v = new boolean[row][col][h];
for (int i = 0; i < h; i++) {
for (int j = 0; j < row; j++) {
st = new StringTokenizer(br.readLine());
for (int k = 0; k < col; k++) {
map[j][k][i] = Integer.parseInt(st.nextToken());
if (map[j][k][i] == 1) {
v[j][k][i] = true;
q.offer(new int[]{j, k, i, 0});
}
}
}
}
int ans = 0;
while (!q.isEmpty()) {
int[] now = q.poll();
int x = now[0];
int y = now[1];
int z = now[2];
int day = now[3];
ans = day;
for (int i = 0; i < 6; i++) {
nx = x + dx[i];
ny = y + dy[i];
nz = z + dz[i];
if (nx < 0 || nx >= row || ny < 0 || ny >= col || nz < 0 || nz >= h) {
continue;
}
if (!v[nx][ny][nz] && map[nx][ny][nz] == 0) {
v[nx][ny][nz] = true;
map[nx][ny][nz] = 1;
q.offer(new int[] {nx, ny, nz, day + 1});
}
}
}
boolean flag = false;
for (int i = 0; i < h; i++) {
for (int j = 0; j < row; j++) {
for (int k = 0; k < col; k++) {
if (map[j][k][i] == 0) {
flag = true;
}
}
}
}
if (flag) {
System.out.println(-1);
} else {
System.out.println(ans);
}
}
}
- 토마토 업그레이드버전
- 거의 비슷한 문제인데 토마토를 익힐때 상하좌우위아래 이렇게 6방향으로 익혀주는게 다르다
'PS > boj' 카테고리의 다른 글
boj)2468 - 안전 영역 (0) | 2020.10.21 |
---|---|
boj)10026 - 적록색약 (0) | 2020.10.21 |
boj)1697 - 숨바꼭질 (0) | 2020.10.17 |
boj)4179 - 불! (0) | 2020.10.17 |
boj)1926 - 그림 (0) | 2020.10.15 |