ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • boj)7569 - 토마토
    PS/boj 2020. 10. 19. 14:11
    import java.io.*;
    import java.util.*;
    
    public class Main {
        static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        static StringTokenizer st;
        static Queue<int[]> q = new LinkedList<>();
        static int row, col, h, nx, ny, nz;
        static int[][][] map;
        static boolean[][][] v;
        static int[] dx = {0, 0, -1, 1, 0, 0}; // 위 아래 상 하 좌 우
        static int[] dy = {0, 0, 0, 0, -1, 1};
        static int[] dz = {1, -1, 0, 0, 0, 0};
    
        public static void main(String[] args) throws IOException {
            st = new StringTokenizer(br.readLine());
            col = Integer.parseInt(st.nextToken());
            row = Integer.parseInt(st.nextToken());
            h = Integer.parseInt(st.nextToken());
    
            map = new int[row][col][h];
            v = new boolean[row][col][h];
    
            for (int i = 0; i < h; i++) {
                for (int j = 0; j < row; j++) {
                    st = new StringTokenizer(br.readLine());
                    for (int k = 0; k < col; k++) {
                        map[j][k][i] = Integer.parseInt(st.nextToken());
    
                        if (map[j][k][i] == 1) {
                            v[j][k][i] = true;
                            q.offer(new int[]{j, k, i, 0});
                        }
                    }
                }
            }
    
            int ans = 0;
            while (!q.isEmpty()) {
                int[] now = q.poll();
                int x = now[0];
                int y = now[1];
                int z = now[2];
                int day = now[3];
                ans = day;
    
                for (int i = 0; i < 6; i++) {
                    nx = x + dx[i];
                    ny = y + dy[i];
                    nz = z + dz[i];
    
                    if (nx < 0 || nx >= row || ny < 0 || ny >= col || nz < 0 || nz >= h) {
                        continue;
                    }
    
                    if (!v[nx][ny][nz] && map[nx][ny][nz] == 0) {
                        v[nx][ny][nz] = true;
                        map[nx][ny][nz] = 1;
                        q.offer(new int[] {nx, ny, nz, day + 1});
                    }
                }
            }
    
            boolean flag = false;
            for (int i = 0; i < h; i++) {
                for (int j = 0; j < row; j++) {
                    for (int k = 0; k < col; k++) {
                        if (map[j][k][i] == 0) {
                            flag = true;
                        }
                    }
                }
            }
    
            if (flag) {
                System.out.println(-1);
            } else {
                System.out.println(ans);
            }
    
        }
    }
    

     

    - 토마토 업그레이드버전

    - 거의 비슷한 문제인데 토마토를 익힐때 상하좌우위아래 이렇게 6방향으로 익혀주는게 다르다

    'PS > boj' 카테고리의 다른 글

    boj)2468 - 안전 영역  (0) 2020.10.21
    boj)10026 - 적록색약  (0) 2020.10.21
    boj)1697 - 숨바꼭질  (0) 2020.10.17
    boj)4179 - 불!  (0) 2020.10.17
    boj)1926 - 그림  (0) 2020.10.15
킹수빈닷컴