7569. 토마토 본문
문제링크 : https://www.acmicpc.net/problem/7569
- 소스 코드 -
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 | import java.util.LinkedList; import java.util.Queue; import java.util.Scanner; public class Main { static int map[][][]; static Queue<point> myQ; static int dx[] = { 0, 0, 0, 0, 1, -1 }; static int dy[] = { 0, 0, 1, -1, 0, 0 }; static int dz[] = { 1, -1, 0, 0, 0, 0 }; static class point { int x; int y; int z; point() { x = 0; y = 0; z = 0; } point(int a, int b, int c) { x = a; y = b; z = c; } }; public static void main(String[] args){ Scanner scan=new Scanner(System.in); myQ = new LinkedList<>(); int x = scan.nextInt(); int y = scan.nextInt(); int z = scan.nextInt(); map = new int[x + 2][y + 2][z + 2]; //////////// 1 입력받는 구간 //////////// for (int k = 0; k < z + 2; k++) { for (int j = 0; j < y + 2; j++) { for (int i = 0; i < x + 2; i++) { if (i == 0 || i == x + 1 || j == 0 || j == y + 1 || k == 0 || k == z + 1) { map[i][j][k] = -1; } else { map[i][j][k] = scan.nextInt(); } } } } ////////////2 처음에 익어있는 토마토를 큐에 넣는다. //////////// for (int i = 1; i <= x; i++) { for (int j = 1; j <= y; j++) { for (int k = 1; k <= z; k++) { if (map[i][j][k] == 1) { myQ.add(new point(i, j, k)); } } } } ////////////3 익어있는 토마토들의 주변의 0을 1로 바꾸고 큐에 넣어준다 //////////// // 큐가 비어있을 때까지 반복 ( BFS ) int tryCount = 0; while (!myQ.isEmpty()) { tryCount++; // 타임을 저장하는 변수 int t = myQ.size(); for (int i = 0; i < t; i++) { point p = myQ.poll(); for (int j = 0; j < 6; j++) { if (map[p.x + dx[j]][p.y + dy[j]][p.z + dz[j]] == 0) { map[p.x + dx[j]][p.y + dy[j]][p.z + dz[j]] = 1; myQ.add(new point(p.x + dx[j], p.y + dy[j], p.z + dz[j])); } else { continue; } } } } ////////////4 BFS를 모두 실행했지만 익지 않은 토마토가 남아있는지 확인 ! //////////// boolean flag=false; for(int i=1;i<=x;i++) { for(int j=1;j<=y;j++) { for(int k=1;k<=z;k++) { if(map[i][j][k]==0) flag=true; } } } if(flag) System.out.println(-1); else System.out.println(tryCount-1); } } | cs |
'알고리즘 문제풀기 > 백준(Acmicpc)' 카테고리의 다른 글
17136. 색종이 붙이기 (0) | 2019.04.12 |
---|---|
17071. 숨바꼭질 5 (4) | 2019.03.26 |
16987. 계란으로 계란치기 (2) | 2019.03.02 |
16986. 인싸들의 가위바위보 (0) | 2019.03.02 |
1322. X와 K (0) | 2019.01.31 |
Comments