(백준 알고리즘 문제풀이) 7569번 토마토
by 줌코딩
문제
어떻게 접근할 것인가
- 이전 토마토 코드에서 인풋을 받는 걸 한층 더 추가해주고
- bfs에서 검색하는 단계에서 방향을 4개가 아니라 6개가 되게 한다.
코드
#include <cstdio>
#include <vector>
#include <queue>
using namespace std;
int main(){
int d[6][3] = { {0,1,0}, {0,-1,0}, {0,0,1}, {0,0,-1}, {1,0,0}, {-1,0,0} };
int X, Y, H, x, y, h, m = 0, n = 0;
scanf("%d %d %d", &X, &Y, &H);
queue<vector<int> > q;
vector<vector<vector<int> > > v(H+2);
for(int k = 0; k < H+2; k++){
v[k] = vector<vector<int> >(Y + 2);
for(int i = 0; i < Y + 2; i++){
v[k][i] = vector<int>(X + 2);
for(int j = 0; j < X + 2; j++){
if(k == 0 || i == 0 || j == 0 || k == H + 1 || i == Y + 1 || j == X + 1)v[k][i][j] = -1;
else{
scanf("%d", &v[k][i][j]);
vector<int> t(3);
t[0] = k, t[1] = i, t[2] = j;
if(v[k][i][j] == 1)q.push(t);
else if(v[k][i][j] == 0) n++;
}
}
}
}
if(n == 0){
printf("0");
return 0;
}
while(!q.empty()){
vector<int> temp = q.front(); q.pop();
int time = v[temp[0]][temp[1]][temp[2]];
for(int i = 0; i < 6; i++){
h = temp[0] + d[i][0], x =temp[1] + d[i][1], y = temp[2] + d[i][2];
if(v[h][x][y] == 0){
n-=1;
v[h][x][y] = time + 1;
if(time + 1 > m) m = time + 1;
vector<int> t(3);
t[0] = h, t[1] = x, t[2] = y;
q.push(t);
}
}
}
if(n == 0)printf("%d", m-1);
else printf("-1");
}
느낀점
- 이로써 BFS를 최종적으로 마무리하게 되어따!!!
- 못푼 문제 없이 모두 마무리하니 기분이 매우 좋다.
- 그간 고생했다 정말!
이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.
Subscribe via RSS