728x90
하....아....
뭐같은 문제...라고 하기엔 내 실수가 너무나도 커서...
아무튼..이 문제는 여느 BFS문제와 똑같이 BFS로 풀면 되는 문제였다.
정육면체로 이루어진 빌딩에서 동,서,남,북,상,하 로 총 6개의 방향으로 움직일 수 있고, 그 움직이는 횟수에 따라 1분이 소요된다. 라고 나와있다. 그 말인 즉슨, 조건에 맞는 이동을 했을 경우 시간을 1 늘려주면 된다. 만일 이동할 수 없거나 E에 도달하지 못하면 Trapped! 가 뜨게 하면 된다. 그리고 0,0,0 좌표를 입력하면 종료하는 조건으로 이 프로그램을 종료 시키면 된다.
근데 저 무수히 찍힌 틀렸습니다는 사실 로직은 맞았지만, 출력문이 이상해서 틀렸습니다가 뜬거다. 근데 난 1시간이상을 내 로직에 문제가 있나? 뭐가 문제지? 라며 온갖 사이트, 솔루션을 보았지만, 내 로직과 다른게 하나도 없던 것이다.
이것에 이상함을 느낀(1시간이 지난 후에야;) 출력문을 봤는데,, 가관이었다. 그래서 빨리 고치고 제출 ^^
#include <bits/stdc++.h>
using namespace std;
char board[31][31][31];
int dist[31][31][31];
int dx[6] = {0,0,1,-1,0,0};
int dy[6] = {1,-1,0,0,0,0};
int dz[6] = {0,0,0,0,1,-1};
int l,r,c;
int tmpz;
int tmpy;
int tmpx;
int main() {
//ios::sync_with_stdio(0);
cin.tie(0);
while(true) {
int cnt = 0;
cin >> l >> r >> c;
if(l == 0 && r == 0 && c == 0) {
return 0;
}
queue<pair<pair<int,int>,int>> Q;
for(int i = 0; i < l; i++) {
for(int j = 0; j < r; j++) {
for(int k = 0; k < c; k++) {
cin >> board[i][j][k];
if(board[i][j][k] == 'S') {
Q.push({{i,j},k});
} else if (board[i][j][k] == 'E') {
tmpz = i; tmpy = j; tmpx = k;
}
}
}
}
bool t = true;
while(!Q.empty()) {
int z = Q.front().first.first;
int y = Q.front().first.second;
int x = Q.front().second;
Q.pop();
for(int i = 0; i < 6; i++) {
int nz = z + dz[i];
int ny = y + dy[i];
int nx = x + dx[i];
if(nx < 0 || nx >= c || ny < 0 || ny >= r || nz < 0 || nz >= l) continue;
if(board[nz][ny][nx] == '#' || dist[nz][ny][nx] != 0) continue;
if(board[nz][ny][nx] == 'E') {
t = false;
}
Q.push({{nz,ny},nx});
dist[nz][ny][nx] = dist[z][y][x]+1;
}
}
if(t) {
cout << "Trapped!" << endl;
} else {
cout << "Escaped in " << dist[tmpz][tmpy][tmpx] << " minute(s)." << endl;
}
for (int i = 0; i < l; i++) {
for (int j = 0; j < r; j++) {
for (int k = 0; k < c; k++) {
dist[i][j][k] = false;
}
}
}
}
}
마지막에 초기화 해줘야 한단다. 이것도 만약에 안했으면 틀렸읍니다 떳겠지..
728x90
'Algorithm > 백준' 카테고리의 다른 글
15688 수 정렬하기 5 (C++) (0) | 2021.05.04 |
---|---|
15683 감시 (C++) (0) | 2021.05.01 |
15656 N과M (7) (C++) (0) | 2021.04.26 |
15654 N과M (5) (C++) (0) | 2021.04.25 |
15652 N과M (4) (C++) (0) | 2021.04.25 |
댓글