728x90
https://www.acmicpc.net/problem/7569
이 문제를 풀기 전에 아래의 문제를 푸시는 것을 추천드립니다!
https://iheeeee6-6.tistory.com/21
1. 3차원 배열을 생성하고 익은 토마토일 경우에는 큐에 넣기, 안익은 토마토 수도 야무지게 세주기
2. bfs를 사용하여 6방향을 체크! - 배열에 해당 칸의 토마토가 익은 날짜 넣기 (영향 준 칸의 값 +1) , 최대일 수 계산해 놓기
3. 안익은 토마토가 있을 경우에는 -1, 다 익었을 경우에는 최대 일수 -1 출력
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.LinkedList;
import java.util.Queue;
import java.util.StringTokenizer;
public class Main {
static int m, n, h, yet = 0, count = 0;
static int[][][] arr;
static boolean[][][] check;
static int[] dx = { 1, -1, 0, 0, 0, 0 };
static int[] dy = { 0, 0, 1, -1, 0, 0 };
static int[] dz = { 0, 0, 0, 0, 1, -1 };
static Queue<Dot> q;
static class Dot {
int x, y, z;
Dot(int x, int y, int z) {
this.x = x;
this.y = y;
this.z = z;
}
}
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
m = Integer.parseInt(st.nextToken());
n = Integer.parseInt(st.nextToken());
h = Integer.parseInt(st.nextToken());
arr = new int[n][m][h];
q = new LinkedList<>();
check = new boolean[n][m][h];
for (int i = 0; i < h; i++) {
for (int j = 0; j < n; j++) {
st = new StringTokenizer(br.readLine());
for (int z = 0; z < m; z++) {
arr[j][z][i] = Integer.parseInt(st.nextToken());
if (arr[j][z][i] == 0)
yet++;
else if (arr[j][z][i] == 1)
q.add(new Dot(j, z, i));
}
}
}
check = new boolean[n][m][h];
while (!q.isEmpty()) {
find(q.poll());
}
System.out.println(yet==0?(count==0?0:count-1):-1);
}
static void find(Dot d) {
for (int i = 0; i < 6; i++) {
int xx = d.x + dx[i];
int yy = d.y + dy[i];
int zz = d.z + dz[i];
if (xx >= 0 && yy >= 0 && zz >= 0 && xx < n && yy < m && zz < h && !check[xx][yy][zz]) {
check[xx][yy][zz] = true;
if (arr[xx][yy][zz] == 0) {
yet--;
arr[xx][yy][zz] = arr[d.x][d.y][d.z]+1;
count=Math.max(count, arr[xx][yy][zz]);
q.add(new Dot(xx, yy, zz));
} else if (arr[xx][yy][zz] == 1) {
q.add(new Dot(xx, yy, zz));
}
}
}
}
}
'Java' 카테고리의 다른 글
[백준 9466] 텀 프로젝트 (JAVA) (0) | 2023.04.03 |
---|---|
[백준 1107] 리모컨 (JAVA) (0) | 2023.03.29 |
[백준 2636] 치즈 (JAVA) (0) | 2023.03.28 |
[백준 1826] 연료 채우기 (JAVA) (0) | 2023.03.28 |
[백준 6588] 골드바흐의 추측 (JAVA) (0) | 2023.03.25 |