BOJ_G5_7569
π [G5_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 {
static class tomato {
int x;
int y;
int z;
public tomato(int x, int y, int z) {
this.x = x;
this.y = y;
this.z = z;
}
}
static int M, N, H, cnt;
static int[][][] box;
static int[] dx = { 0, 0, 1, -1, 0, 0 };
static int[] dy = { 1, -1, 0, 0, 0, 0 };
static int[] dz = { 0, 0, 0, 0, 1, -1 };
static Queue<tomato> queue;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
// **** input start ****
M = Integer.parseInt(st.nextToken());
N = Integer.parseInt(st.nextToken());
H = Integer.parseInt(st.nextToken());
box = new int[H][N][M];
queue = new LinkedList<tomato>();
for (int i = 0; i < H; i++) {
for (int j = 0; j < N; j++) {
st = new StringTokenizer(br.readLine(), " ");
for (int z = 0; z < M; z++) {
box[i][j][z] = Integer.parseInt(st.nextToken());
// μ΅μ ν λ§ν λΌλ©΄ queue μ μ½μ
if (box[i][j][z] == 1)
queue.add(new tomato(z, j, i));
}
}
}
// **** input end ****
System.out.println(BFS());
} // main end
public static int BFS() {
// νκ° λΉλκΉμ§
while(!queue.isEmpty()) {
tomato to = queue.poll();
int x = to.x;
int y = to.y;
int z = to.z;
int nx,ny,nz;
for(int i=0; i<6; i++) {
nx = x + dx[i];
ny = y + dy[i];
nz = z + dz[i];
// λ²μ μμμ 체ν¬
if(nx>=0 && ny>=0 && nz>=0 && nx<M && ny<N && nz<H) {
// ν λ§ν κ° μμ΅μμΌλ©΄
if(box[nz][ny][nx]==0) {
// ν λ§ν μ΅νμ μΆκ°
queue.add(new tomato(nx, ny, nz));
// μ΅μ λ + 1
box[nz][ny][nx] = box[z][y][x] + 1;
}
}
}
}
// μ΅λ λ μ§
int res = Integer.MIN_VALUE;
for(int i=0; i<H; i++) {
for(int j=0; j<N; j++) {
for(int k=0; k<M; k++) {
// λ§μ½ μμ΅μ ν λ§ν κ° μλ€λ©΄
if(box[i][j][k] == 0) return -1;
// μ’νμλ λ μ§λ€μ΄ μ μ₯λμ΄ μλ€.
res = Math.max(res, box[i][j][k]);
}
}
}
// λκΈ°μ μ μ΄λ―Έ λ€ μ΅μ ν λ§ν λ§ μλ κ²½μ°
if(res == 1) return 0;
// μ΅λλ μ§μμ 1λΉΌμ£ΌκΈ°
else return res-1;
}
} // class end
π€ λμ μκ°
μ²μμ μνμΌλ‘ νμμΌλ.. μκ°μ΄κ³Όλ‘ μ€ν¨ .. γ
κ·Έλμ μ°Ύμλ³Έ κ²°κ³Ό queue + bfs λ₯Ό νμ©νλ κ²μ μ μ μμλ€.
λ΄κ° μ¬κΈ°μ μΊμΉνμ§ λͺ»ν κ²μ μκ°μ 체ν¬νλ λ°©λ²μ΄λ€..
μ°Ύμ λ°©λ²μμλ μκ°μ²΄ν¬λ₯Ό boxμ +1 μ© ν΄κ°λ©΄μ λμ€μ μ 체 μ’νλ₯Ό λλ©΄μ κ°μ₯ ν° μ’νκ°(μκ°)μ κ°μ Έμ€λ κ²μ΄λ€.
μ΄ λ°©λ²μ μμ μκ°νμ§ λͺ»νλλ° .. ν΄μ° κ·Έλ¦¬κ³ queue μ°λ κ²λ μκ°νμ§ λͺ»νλ°..
μ¬νκ΅°
λ°©λ²μ λ€μκ³Ό κ°λ€.
- queueμ μ΅μ ν λ§ν μ μ₯
- bfsλ‘ 6λ°©ν₯ νμμ ν΅ν΄ ν λ§ν κ° μμ΅μμΌλ©΄ μ΅νκ³ κ·Έ μ리μ κ·Έμ box κ° + 1 ν΄μ μκ° μ²΄ν¬
- κ²°κ΅ boxμ μ μ₯λλ κ°μ μκ° κ°
- queueκ° λΉ λ κΉμ§ λμμ£Όκ³ λ€ λκ³ λμ κ²°κ³Όκ° μΆλ ₯
- μμ΅μ ν λ§ν κ° μμΌλ©΄ -1
- λκΈ°μ μ μ΄λ―Έ ν λ§ν κ° λ€ μ΅μλ€λ©΄ 0
- μ΄μμ΄ μλ€λ©΄ μ΅λκ°μμ -1 ν΄μ£ΌκΈ° ( μ΄λ―Έ 1λ€μ΄ μ μ₯λμ΄ μμκΈ° λλ¬Έμ )