-
[백준] 7569 토마토#JAVAAlgorithm Solving/BAEKJOON 2020. 12. 6. 17:45
BAEKJOON [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 { public static void main(String[] args) throws IOException{ BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int N,M,H; int[][][] box ; int[][][] dist ; Queue<int[]> queue = new LinkedList<int[]>(); int[] dx = {0,0,1, 0, 0,-1}; int[] dy = {0,1,0, 0,-1, 0}; int[] dz = {1,0,0,-1, 0, 0}; int result = 0; String nm = br.readLine(); StringTokenizer st = new StringTokenizer(nm, " "); N = Integer.parseInt(st.nextToken()); //행 M = Integer.parseInt(st.nextToken()); //열 H = Integer.parseInt(st.nextToken()); // 높이 box = new int[H][M][N]; dist = new int[H][M][N]; for (int z = 0; z < H; z++) { // H for (int y = 0; y < M; y++) { // M String input = br.readLine(); st = new StringTokenizer(input, " "); for (int x = 0; x < N ; x++) { //N box[z][y][x] = Integer.parseInt(st.nextToken()); if(box[z][y][x] == 0) { dist[z][y][x] = -1; } else if(box[z][y][x] == 1) { queue.add(new int[] {z,y,x}); //출발점을 큐에 넣는다. dist 배열은 0 } } } } //bfs while (!queue.isEmpty()) { int[] loc = queue.poll(); for (int i = 0; i < 6; i++) { int nz = loc[0] +dz[i]; int ny = loc[1] +dy[i]; int nx = loc[2] +dx[i]; if(nx < 0 || ny < 0 || nz < 0 || nx >= N || ny >= M || nz >= H) continue; if(box[nz][ny][nx] == -1) continue; if(dist[nz][ny][nx] >= 0) continue; dist[nz][ny][nx] = dist[loc[0]][loc[1]][loc[2]] +1; queue.add(new int[] {nz,ny,nx}); } } for (int z = 0; z < H; z++) { // H if(result == -1) break; for (int y = 0; y < M; y++) { // M if(result == -1) break; for (int x = 0; x < N; x++) { // N if(dist[z][y][x] == -1) { result = -1; return; }else if(result != -1 && dist[z][y][x] > result){ result = dist[z][y][x]; } } } } System.out.println(result); } }
풀이
- BFS
- 3차원 토마토 x,y,z 6곳을 체크해야한다.
- 오타 조심..
잘못된 코드나 내용이 있다면 댓글을 남겨주세요. 즉시 수정하도록 하겠습니다! :)
'Algorithm Solving > BAEKJOON' 카테고리의 다른 글
[백준] 1697 숨바꼭질 #JAVA (0) 2020.12.10 [백준] 4179 불 #JAVA (0) 2020.12.09 [백준] 7576 토마토 #JAVA (0) 2020.12.05 [백준] 1926 그림 #JAVA (0) 2020.12.03 [백준] 2178 미로탐색 #JAVA (0) 2020.12.03