728x90

 0. [c++] 백준  - 


https://www.acmicpc.net/problem/7579


 1. 풀이


이 문제는 7576번 문제인 토마토(https://www.acmicpc.net/problem/7576)와 너무 비슷하기에 풀이는 생략한다.


이에 대한 풀이가 궁금하다면 https://kyunstudio.tistory.com/118를 참고해주세요.


 2. 소스코드


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
#include<iostream>
#include<queue>
 
using namespace std;
 
int tomatoBox[102][102][101];
int Y, X, H, MAX;
int dirX[6= { 001-1,0,0 };
int dirY[6= { 1-100,0,0 };
int dirH[6= { 0,0,0,0,1,-1 };
queue<pair<pair<intint>int> > findHere;
 
 
int Max(int a, int b) {
    return a > b ? a : b;
}
 
void BFS(int hereY, int hereX, int hereH) {
    //6방향 탐색을 들어가자
    for (int i = 0; i < 6; i++) {
        int nextY = hereY + dirY[i], nextX = hereX + dirX[i], nextH = hereH + dirH[i];
        //범위를 넘지 않도록 조건을 넣어준다.
        if (nextY < Y&&nextX < X && nextY >= 0 && nextX >= 0 && nextH >= 0 && nextH < H) {
            if (tomatoBox[nextY][nextX][nextH] == 0) {
                tomatoBox[nextY][nextX][nextH] = tomatoBox[hereY][hereX][hereH] + 1;
                findHere.push({{ nextY, nextX }, nextH});
            }
        }
 
    }
}
 
int main() {
    cin >> X >> Y >> H;
    for (int h = 0; h < H; h++)
        for (int y = 0; y < Y; y++)
            for (int x = 0; x < X; x++)
            {
                cin >> tomatoBox[y][x][h];
                if (tomatoBox[y][x][h] == 1)
                    findHere.push({{ y,x }, h});
            }
 
 
    while (!findHere.empty()) {
        BFS(findHere.front().first.first, findHere.front().first.second, findHere.front().second);
        findHere.pop();
    }
 
    for (int h = 0; h < H; h++)
        for (int y = 0; y < Y; y++)
            for (int x = 0; x < X; x++)
            {
                if (tomatoBox[y][x][h] == 0) {
                    cout << -1;
                    return 0;
                }
                MAX = Max(MAX, tomatoBox[y][x][h]);
            }
 
    cout << MAX - 1;
    return 0;
}
cs


 3. 참고


https://kyunstudio.tistory.com/118



질문이나 지적 있으시면 댓글로 남겨주세요~

도움 되셨으면 하트 꾹!


+ Recent posts