티스토리 뷰

PS/boj

boj)7569 - 토마토

kingsubin 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