본문 바로가기
코딩테스트

[백준7569] 토마토 [java]

by 근즈리얼 2021. 3. 27.
728x90


이전에 풀었던 토마토 문제와 비슷하지만 새로운 메소드를 만들지 않고 while문을 통해 풀었다.

또한 3차원으로 생각하고 문제를 풀었다.

 

상,하,좌,우,위,아래 총 6부분을 생각하면 된다

 

코드

package baekjoon;

import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;

public class tomato2 {
    static int[] dx = {-1,0,1,0,0,0};
    static int[] dy = {0,1,0,-1,0,0};
    static int[] dz = {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();

        Queue<Point> queue = new LinkedList<>();

        int[][][] arr = new int[h][n][m];
        boolean[][][] check = new boolean[h][n][m];

        for(int k = 0; k<h;k++){
            for(int i=0;i<n;i++){
                for(int j = 0; j<m;j++){
                    arr[k][i][j] = sc.nextInt();
                    if(arr[k][i][j] == 1){
                        queue.add(new Point(k,i,j));
                        check[k][i][j] = true;
                    }
                }
            }
        }
        while(!queue.isEmpty()){
            Point t = queue.poll();
            int x = t.x;
            int y = t.y;
            int z = t.z;

            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<h && ny < n && nz < m){
                    if(arr[nx][ny][nz] == 0 && !check[nx][ny][nz]){
                        queue.add(new Point(nx,ny,nz));
                        arr[nx][ny][nz] = arr[x][y][z] + 1;
                    }
                }
            }
        }
        int max = 0;

        for(int k = 0; k<h;k++){
            for(int i = 0; i<n; i++){
                for(int j = 0; j<m;j++){
                    if(arr[k][i][j] == 0){
                        System.out.println(-1);
                        return;
                    }
                    if(max < arr[k][i][j]){
                        max = arr[k][i][j];
                    }
                }
            }
        }
        System.out.println(max-1);

    }
}
class Point{
    int x,y,z;

    public Point(int x,int y, int z){
        this.x = x;
        this.y = y;
        this.z = z;
    }
}
728x90

'코딩테스트' 카테고리의 다른 글

[백준 9372] 상근이의 여행 [java]  (0) 2021.03.31
[백준1707] 이분 그래프 [java]  (0) 2021.03.28
[백준7576] 토마토[java]  (0) 2021.03.23
[백준2178] 미로 탐색 [java]  (1) 2021.03.23
[백준1012] 유기농 배추[java]  (0) 2021.03.23

댓글