하다보니

6593번-상범 빌딩 본문

알고리즘 풀이/백준

6593번-상범 빌딩

claire 2022. 2. 17. 20:02
/*
상범 빌딩에서 탈출하는 가장 빠른 길. 각 변의 길이가 1인 정육면체로 이루어져 있다.
금으로 이루어져 자나갈 수 없거나. 비어있어서 지나갈 수 있다. 
각 칸에서 인접한 6개의 칸으로 1분의 시간을 들여 이동할 수 있다. 
대각선으로 이동하는 것은 불가능하다. 그리고 상범 빌딩의 바깥 면도 모두 금이라 출구로만 탈출 가능하다. 
상범 빌딩 탈출 가능? 얼마나 걸림?
금은 #이고 비어있는 칸은 . 시작 지점은 S 탈출구는 E
*/
#include<bits/stdc++.h>
using namespace std;

int dx[6] = { 0, 0, 1, -1, 0, 0 };
int dy[6] = { 1, -1, 0, 0, 0, 0 };
int dh[6] = { 0, 0, 0, 0, 1, -1 };

int main() {
	while (1) {
		int L, R, C;	//L은 빌딩의 층 수, R은 한 층의 행, C는 한 층의 열
		char board[32][32][32];
		int vis[32][32][32] ;
		bool isescape = false;
		queue<tuple<int, int, int>> q;
		
		cin >> L >> R >> C;
		if (L == 0 && R == 0 && C == 0)break;
		for (int h = 0; h < L; h++) {
			for (int i = 0; i < R; i++) {
				for (int j = 0; j < C; j++) {
					vis[i][j][h] = 0;
				}
				
			}
		}
		
		for(int h=0;h<L;h++) {
			for (int i = 0; i < R; i++) {
				for (int j = 0; j < C; j++) {
					cin >> board[i][j][h];
					if (board[i][j][h] == 'S') {
						vis[i][j][h] = 1;
						q.push({ i,j,h });
					}
					
				}
			}
		}
		while (!q.empty()) {
			if (isescape)break;
			auto cur = q.front(); q.pop();
			int curX, curY, curH;
			tie(curX, curY, curH) = cur;
			for (int i = 0; i < 6; i++) {
				int nx = curX + dx[i];
				int ny = curY + dy[i];
				int nh = curH + dh[i];
				if (nx < 0 || nx >= R || ny < 0 || ny >= C || nh < 0 || nh >= L)continue;
				if (board[nx][ny][nh] == '#' || vis[nx][ny][nh] > 0)continue;
				if (board[nx][ny][nh] == 'E') {
					isescape = true;
					cout << "Escaped in " << vis[curX][curY][curH] << " minute(s).\n";
					break;
				}
				vis[nx][ny][nh] = vis[curX][curY][curH] + 1;
				q.push({ nx,ny,nh });
			}
			
		}
		while (!q.empty())q.pop();
		if (!isescape)cout << "Trapped!"<<"\n";
	}
	

}

진짜....계속 실패라 뭐가 문제인지 30분 넘게 고민했는데.....\n 줄바꿈 안 함...현실이냐..?

제발 꼼꼼해져라~~~~

'알고리즘 풀이 > 백준' 카테고리의 다른 글

3986번-균형 잡힌 세상  (0) 2022.03.07
2630번-색종이 만들기  (0) 2022.02.18
1780번-종이의 개수  (0) 2022.02.16
3015번-오아시스 재결합  (0) 2022.02.16
6198번-옥상 정원 꾸미기  (0) 2022.02.09