본문 바로가기

Notice
Recent Posts
Recent Comments
«   2024/04   »
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
Tags
더보기
Archives
관리 메뉴

7569. 토마토 본문

알고리즘 문제풀기/백준(Acmicpc)

7569. 토마토

알광(Algwang) 2019. 3. 6. 16:42

문제링크 : 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[] = { 00001-1 };
    static int dy[] = { 001-100 };
    static int dz[] = { 1-10000 };
 
    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