7576번과 같은 토마토 문제인데 이번엔 3차원이다.
크게 다를 건 없었지만 이래저래...배열의 인덱스에서 실수를 많이 했다.
import java.io.*;
import java.util.*;
public class Main {
// 토마토 클래스
static class Tomato{
int z;
int x;
int y;
// 생성자
Tomato(int z, int x, int y){
this.z=z;
this.x=x;
this.y=y;
}
}
// 위 아래 왼쪽 오른쪽 위 아래
static int[] dz = {1,-1,0,0,0,0};
static int[] dx = {0,0,-1,1,0,0};
static int[] dy = {0,0,0,0,1,-1};
static int M;
static int N;
static int H;
static int[][][] box;
static Queue<Tomato> queue = new LinkedList<>();
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()); // 상자의 개수
box = new int[H][N][M];
for(int i=0;i<H;i++) {
for(int j=0;j<N;j++) {
st = new StringTokenizer(br.readLine()," ");
for(int k=0;k<M;k++) {
box[i][j][k] = Integer.parseInt(st.nextToken());
if(box[i][j][k]==1) {
// 익은 토마토라면 큐에 넣음
queue.add(new Tomato(i, j, k));
}
}
}
}
System.out.println(bfs());
}
static int bfs() {
while(!queue.isEmpty()) {
Tomato t = queue.poll();
int z = t.z;
int x = t.x;
int y = t.y;
for(int i=0;i<6;i++) {
int nx = x+dx[i];
int ny = y+dy[i];
int nz = z+dz[i];
if(nx>=0&&ny>=0&&nz>=0&&nx<N&&ny<M&&nz<H) {
if(box[nz][nx][ny]==0) {
queue.add(new Tomato(nz, nx, ny));
box[nz][nx][ny] = box[z][x][y]+1;
}
}
}
}
int result = -999;
for(int i=0;i<H;i++) {
for(int j=0;j<N;j++) {
for(int k=0;k<M;k++) {
if(box[i][j][k]==0) return -1;
result = Math.max(result, box[i][j][k]);
}
}
}
if(result==1) return 0;
else return result-1;
}
}
'Algorithm > [BOJ] - JAVA' 카테고리의 다른 글
[백준] 2146 : 다리 만들기 JAVA 풀이 (0) | 2022.10.20 |
---|---|
[백준] 2178 : 미로 탐색 JAVA 풀이 (1) | 2022.10.14 |
[백준] 7576 : 토마토 JAVA 풀이 (0) | 2022.10.14 |
[백준] 4963 : 섬의 개수 JAVA 풀이 (0) | 2022.10.14 |
[백준] 2667 : 단지번호 붙이기 JAVA 풀이 (0) | 2022.10.13 |