🔗 문제 링크
📝 풀이 과정
[백준] 7576번: 토마토에서 높이만 추가된 문제이다. 높이가 추가되었기 때문에 기존 4방향(앞, 뒤, 왼쪽, 오른쪽) 탐색에서 2방향(위, 아래)도 탐색해야한다.
이 문제에서 헷갈릴 수 있는 부분은 배열 선언 부분인데 기존 tomato[N][M]배열이 높이(H)개 만큼 존재하는 것이므로 tomato[H][N][M]이 되어야 한다!
💻 코드
import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int[] dy = { 0, 0, -1, 1, 0, 0 };
int[] dx = { 0, 0, 0, 0, -1, 1 };
int[] dz = { -1, 1, 0, 0, 0, 0 };
int M = sc.nextInt(), N = sc.nextInt(), H = sc.nextInt();
int[][][] tomato = new int[H][N][M];
int cnt = 0, days = 0;
Queue<int[]> que = new LinkedList<>();
for (int h = 0; h < H; h++) {
for (int n = 0; n < N; n++)
for (int m = 0; m < M; m++) {
tomato[h][n][m] = sc.nextInt();
if (tomato[h][n][m] == 1)
que.add(new int[] { h, n, m });
else if (tomato[h][n][m] == 0)
cnt++;
}
}
while (cnt > 0 && !que.isEmpty()) {
for (int s = que.size(); s > 0; s--) {
int[] cur = que.poll();
for (int k = 0; k < 6; k++) {
int nz = cur[0] + dz[k];
int ny = cur[1] + dy[k];
int nx = cur[2] + dx[k];
if (ny < 0 || nx < 0 || nz < 0 || ny >= N || nx >= M || nz >= H || tomato[nz][ny][nx] != 0)
continue;
cnt--;
tomato[nz][ny][nx] = 1;
que.add(new int[] { nz, ny, nx });
}
}
days++;
}
System.out.println(cnt == 0 ? days : -1);
}
}
📊 제출 결과
'알고리즘 풀이 > 백준' 카테고리의 다른 글
[백준] 9019번: DSLR - JAVA (0) | 2020.12.13 |
---|---|
[백준] 7662번: 이중 우선순위 큐 - JAVA (2) | 2020.12.13 |
[백준] 7576번: 토마토 - JAVA (0) | 2020.12.13 |
[백준] 5525번: IOIOI - JAVA (0) | 2020.12.13 |
[백준] 6064번: 카잉 달력 - JAVA (0) | 2020.12.13 |