본문 바로가기
개발 관련 공부/알고리즘

백준 7569 토마토2

by 슴새 2021. 8. 24.
반응형

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

댓글