본문 바로가기
Algorithm/백준

6593 상범 빌딩 (C++)

by IT learning 2021. 4. 28.
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

댓글

IT_learning's Commit