-
백준(C++) 6593번 [상범 빌딩]알고리즘(백준) 2025. 9. 14. 23:09

6593 상범 빌딩 접근방법
3차원 좌표에서 출구를 찾는 방법의 최소값을 찾으면 되는 BFS의 보편적인 문제다.
다른 BFS 문제와 비슷하게 코드의 씀씀이만 잘 정리하면 쉽게 풀수있다.
그래프 안에 큐를 이용하여 BFS를 만들고 반복문을 이용하여 최소값을 찾으면된다.
정리한 몇개의 중요 키워드는 다음과 같다.
1. BFS 그래프
2. BFS 거리
3. 입출력 함수
출력 함수가 두 가지 상태가 있으므로 이부분만 주의 하면 쉬운 문제이다.
(20이라면 도달 불가능 : "Trapped!" , 0보다 크다면 탈출 성공 : "Escaped in X minute(s)." 출력 )
코드는 다음과 같다
#include<bits/stdc++.h> //6593 using namespace std; int l,r,c; // 입력변수 int dir[6][3] = {{1,0,0},{0,1,0},{-1,0,0},{0,-1,0},{0,0,1},{0,0,-1}}; int out; // 출력 함수 queue<pair<pair<int,int>,int>> q; // bfs 큐선언 int main(){ ios::sync_with_stdio(0); cin.tie(0); while(1){ char board[31][31][31] = {0,0,0}; // bfs 보드 int is[31][31][31] = {0,0,0}; // bfs 거리 int ax,ay,az; // 탈출구 저장용 함수 cin >> l >> r >> c; if(l == 0 && r == 0 && c == 0)break; for(int a=0;a<l;a++){ for(int i=0;i<r;i++){ for(int j=0;j<c;j++){ cin >> board[i][j][a]; if(board[i][j][a] == 'S')q.push({{i,j},a}); if(board[i][j][a] == 'E'){ ax = i; ay= j; az = a; } } } } while(!q.empty()){ auto cur = q.front();q.pop(); for(int a=0;a<6;a++){ int nx = cur.first.first+dir[a][0]; int ny = cur.first.second+dir[a][1]; int nz = cur.second+dir[a][2]; if(nx < 0 || ny < 0 || nz < 0 || nx >= r ||ny >= c || nz >= l)continue; if(board[nx][ny][nz] == '#'|| is[nx][ny][nz] != 0)continue; is[nx][ny][nz] = is[cur.first.first][cur.first.second][cur.second]+1; q.push({{nx,ny},nz}); } } if(is[ax][ay][az] == 0)cout << "Trapped!" <<'\n'; else cout << "Escaped in " << is[ax][ay][az] << " minute(s)." << '\n'; } return 0; }'알고리즘(백준)' 카테고리의 다른 글
백준(C) 2098번 [외판원 순회] (0) 2025.02.24 백준(C) 1644번 [소수의 연속합] (3) 2025.01.28 백준(C) 1806번 [부분합] (3) 2025.01.28 백준(C) 2470번 [두 용액] (5) 2025.01.28 백준(C) 9251번 [LCS] (7) 2025.01.27