[백준] C++ 6593번:상범 빌딩!

2025. 12. 17. 09:38·알고리즘

생각할 것

1. 몇번째 인지 dist 벡터에 기록

2. 테케 여러개 있음

 

<정답 코드>

#include <bits/stdc++.h>
using namespace std;

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

int main()
{
    ios::sync_with_stdio(0);
    cin.tie(0);
    
    int l, r, c;
    cin >> l >> r >> c;

    while (l != 0 && r != 0 && c != 0) {
        int flag = 0;
        vector<vector<vector<char>>> v (l, vector<vector<char>> (r, vector<char> (c)));
        vector<vector<vector<int>>> dis (l, vector<vector<int>> (r, vector<int> (c, -1)));
        int sy, sx, sz;
        int ez, ey, ex;
        for (int ll = 0; ll < l; ll++) {
            for (int rr = 0; rr < r; rr++) {
                for (int cc = 0; cc < c; cc++) {
                    cin >> v[ll][rr][cc];
                    if (v[ll][rr][cc] == 'S') {
                        sz = ll;
                        sy = rr;
                        sx = cc;
                    }
                    if (v[ll][rr][cc] == 'E') {
                        ez = ll;
                        ey = rr;
                        ex = cc;
                    }
                }
            }
        }
        queue<tuple<int, int, int>> q;
        q.push(make_tuple(sz, sy, sx));
        dis[sz][sy][sx] = 0;
        while(!q.empty()) {
            auto cur = q.front();
            q.pop();
            for (int i = 0; i < 6; i++) {
                int zz = get<0>(cur) + dz[i];
                int yy = get<1>(cur) + dy[i];
                int xx = get<2>(cur) + dx[i];
                if (zz > -1 && zz < l && yy > -1 && yy < r && xx > -1 && xx < c && (v[zz][yy][xx] == '.' || v[zz][yy][xx] == 'E') && dis[zz][yy][xx] == -1) {
                    if (zz == ez && yy == ey && xx == ex) {
                        cout << "Escaped in " << dis[get<0>(cur)][get<1>(cur)][get<2>(cur)] + 1 << " minute(s).\n";
                        flag = 1;
                        break;
                    }
                    q.push(make_tuple(zz, yy, xx));
                    dis[zz][yy][xx] = dis[get<0>(cur)][get<1>(cur)][get<2>(cur)] + 1;
                }
            }
            if (flag) break;
        }
        if (!flag) cout << "Trapped!\n";
        cin >> l >> r >> c;
    }
    

    return 0;
}

'알고리즘' 카테고리의 다른 글

[백준] C++ 14890번 경사로  (0) 2026.04.08
[백준] C++ 2468번:안전영역!  (1) 2025.12.16
[백준] C++ 5014번:스타트링크!  (0) 2025.12.16
[백준] C++ 2667번:단지번호붙이기!  (0) 2025.12.16
[백준] C++ 2583번:영역 구하기!  (0) 2025.12.15
'알고리즘' 카테고리의 다른 글
  • [백준] C++ 14890번 경사로
  • [백준] C++ 2468번:안전영역!
  • [백준] C++ 5014번:스타트링크!
  • [백준] C++ 2667번:단지번호붙이기!
Deepmind_딥마인드
Deepmind_딥마인드
깊게 사고하자
  • Deepmind_딥마인드
    딥마인드
    Deepmind_딥마인드
  • 전체
    오늘
    어제
    • 분류 전체보기 (19)
      • 알고리즘 (11)
      • 메모 (0)
      • C언어 (0)
      • C언어 동아리 (0)
      • Ubuntu (0)
      • Ollama (1)
      • AI (4)
      • 정보공유 (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    Air Pods Pro
    OpenAI
    DBeaver
    호환
    단차
    에어팟
    ollama
    노이즈캔슬링
    스크래치
    배터리 광탈
    냄새
    Claude
    소셜딜레마 #넷플릭스 #다큐멘터리 #넷플릭스 영화추천
    백준
    Ai
    agent
    에어팟 프로
    만다라트 #오타니 #목표설정 #무료템플릿
    렉
    먼지
    ubuntu server 24.04.4 LTS
    c언어
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.5
Deepmind_딥마인드
[백준] C++ 6593번:상범 빌딩!
상단으로

티스토리툴바