반응형
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.*;
public class Main {
public static int nx []= {1,-1,0,0,0,0};
public static int ny []= {0,0,-1,1,0,0};
public static int nz []= {0,0,0,0,-1,1};
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int m=sc.nextInt();
int n=sc.nextInt();
int h=sc.nextInt();
int[][][] arr = new int[m][n][h];
int cnt = 0;
int day = 0;
Queue<int[]> q = new LinkedList<>();
for(int k=0;k<h;k++) {
for(int j=0;j<n;j++) {
for(int i=0;i<m;i++) {
arr[i][j][k]=sc.nextInt();
if(arr[i][j][k]==1) {
q.add(new int [] {i,j,k});
}
else if(arr[i][j][k]==0)
cnt++;
}
}
}
//---세팅 끝---
//cnt는 토마토 갯수만큼 있음. 토마토 익힐 때마다 cnt--하고, cnt가 0이되면 탈출
while(!q.isEmpty()&&cnt>0) {
for (int s = q.size(); s > 0; s--) {
int temp []=q.poll();
for(int k=0;k<6;k++) {
int x=temp[0]+nx[k];
int y=temp[1]+ny[k];
int z=temp[2]+nz[k];
//인덱스 범위 넘지 않도록
if(x>=0&&y>=00&&z>=0&&x<m&&y<n&&z<h) {
if(arr[x][y][z]==0) {
arr[x][y][z]=1;
cnt--;
q.add(new int [] {x,y,z});
}
}
}
}
day++;
}
if(cnt>0) System.out.println(-1);
else System.out.println(day);
}
}
반응형
'개발 관련 공부 > 알고리즘' 카테고리의 다른 글
백준 11725 트리의 부모 찾기 (0) | 2021.08.26 |
---|---|
백준 1697 숨바꼭질 (0) | 2021.08.25 |
백준 7576 토마토 (0) | 2021.08.23 |
백준 1302 베스트셀러 (0) | 2021.08.20 |
백준 9012 괄호 (0) | 2021.08.19 |
댓글