ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [백준] 7569 토마토#JAVA
    Algorithm Solving/BAEKJOON 2020. 12. 6. 17:45

     

    BAEKJOON [7569] 토마토


    코드


     

    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 {
    
    	public static void main(String[] args) throws IOException{
    		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    		int N,M,H;
    		int[][][] box ;
    		int[][][] dist ;
    		Queue<int[]> queue = new LinkedList<int[]>();
    		int[] dx = {0,0,1, 0, 0,-1};
    		int[] dy = {0,1,0, 0,-1, 0};
    		int[] dz = {1,0,0,-1, 0, 0};
    		int result = 0;
    
    		String nm = br.readLine();
    		StringTokenizer st = new StringTokenizer(nm, " ");
    		N = Integer.parseInt(st.nextToken());	//행
    		M = Integer.parseInt(st.nextToken());	//열
    		H = Integer.parseInt(st.nextToken());	// 높이
    	
    		box = new int[H][M][N];
    		dist = new int[H][M][N];
    		
    		for (int z = 0; z < H; z++) {	// H
    			for (int y = 0; y < M; y++) {	// M
    				String input = br.readLine();
    				st = new StringTokenizer(input, " ");
    
    				for (int x = 0; x < N ; x++) {	//N
    					box[z][y][x] = Integer.parseInt(st.nextToken());
    					
    					if(box[z][y][x] == 0) {
    						dist[z][y][x] = -1;
    					}
    					else if(box[z][y][x] == 1) {
    						queue.add(new int[] {z,y,x});	//출발점을 큐에 넣는다. dist 배열은 0
    					}
    					
    				}
    			}
    		}
    		
    		//bfs
    		while (!queue.isEmpty()) {
    			int[] loc = queue.poll();
    			for (int i = 0; i < 6; i++) {
    				int nz = loc[0] +dz[i];
    				int ny = loc[1] +dy[i];
    				int nx = loc[2] +dx[i];
    				
    				if(nx < 0 || ny < 0 || nz < 0 || nx >= N || ny >= M || nz >= H) continue;
    				if(box[nz][ny][nx] == -1) continue;
    				if(dist[nz][ny][nx] >= 0) continue;
    				
    				dist[nz][ny][nx] = dist[loc[0]][loc[1]][loc[2]] +1;
    				queue.add(new int[] {nz,ny,nx});
    			}
    		}
    		
    		for (int z = 0; z < H; z++) {	// H
    			if(result == -1) break;
    			for (int y = 0; y < M; y++) {	// M
    				if(result == -1) break;
    				for (int x = 0; x < N; x++) {	// N
    					if(dist[z][y][x] == -1) {
    						result = -1;
    						return;
    					}else if(result != -1 && dist[z][y][x] > result){
    						result = dist[z][y][x];
    					}
    				}
    			}
    		}
    		
    		System.out.println(result);
    		
    	}
    }
    

     

     

     

    풀이


    • BFS
    • 3차원 토마토 x,y,z 6곳을 체크해야한다.
    • 오타 조심..

     

     


    잘못된 코드나 내용이 있다면 댓글을 남겨주세요. 즉시 수정하도록 하겠습니다! :)

     

    'Algorithm Solving > BAEKJOON' 카테고리의 다른 글

    [백준] 1697 숨바꼭질 #JAVA  (0) 2020.12.10
    [백준] 4179 불 #JAVA  (0) 2020.12.09
    [백준] 7576 토마토 #JAVA  (0) 2020.12.05
    [백준] 1926 그림 #JAVA  (0) 2020.12.03
    [백준] 2178 미로탐색 #JAVA  (0) 2020.12.03

    댓글