https://www.acmicpc.net/problem/7569
문제
앞에서 푼 토마토 문제와 똑같은데 다른 점은 토마토 상자가 H높이만큼 있다.
풀이
앞의 토마토 문제를 똑같이 3차원으로만 구현해주면 된다.
import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.IOException; import java.util.*; public class Main { static int dx[] = {-1, 1, 0, 0, 0, 0}; static int dy[] = {0, 0, -1, 1, 0, 0}; static int dz[] = {0, 0, 0, 0, -1, 1}; static class Tomato { int x; int y; int z; Tomato(int x, int y, int z) { this.x = x; this.y = y; this.z = z; } } public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringTokenizer st = new StringTokenizer(br.readLine()); int m = Integer.parseInt(st.nextToken()); int n = Integer.parseInt(st.nextToken()); int h = Integer.parseInt(st.nextToken()); int box[][][] = new int[h][n][m]; int day[][][] = new int[h][n][m]; boolean check[][][] = new boolean[h][n][m]; Queue <Tomato> q = new LinkedList<Tomato>(); for(int k=0; k<h; k++){ for(int i=0; i<n; i++) { st = new StringTokenizer(br.readLine()); for(int j=0; j<m; j++) { box[k][i][j] = Integer.parseInt(st.nextToken()); if(box[k][i][j] == 1) { check[k][i][j] = true; q.add(new Tomato(i,j,k)); } } } } int ans = 0; while(!q.isEmpty()) { Tomato t = q.remove(); 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 < n && ny < m && nz < h) { if(box[nz][nx][ny] == 0 && check[nz][nx][ny] == false) { check[nz][nx][ny] = true; q.add(new Tomato(nx,ny,nz)); day[nz][nx][ny] = day[z][x][y] +1; if(ans < day[nz][nx][ny]) ans = day[nz][nx][ny]; } } } } for(int k=0; k<h; k++) { for(int i=0; i<n; i++) { for(int j=0; j<m; j++) { if(box[k][i][j] == 0 && check[k][i][j] == false) { System.out.println(-1); return; } } } } System.out.println(ans); } }
'BOJ' 카테고리의 다른 글
[BOJ] 2606. 바이러스 (0) | 2019.05.01 |
---|---|
[BOJ] 4963. 섬의 개수 (0) | 2019.05.01 |
[BOJ] 7576. 토마토 (0) | 2019.04.30 |
[BOJ] 11724. 연결 요소의 개수 (0) | 2019.04.29 |
[BOJ] 2309. 일곱 난쟁이 (0) | 2019.04.29 |