본문 바로가기

코딩 소양/알고리즘 문제

[백준 알고리즘] 6593번 상범빌딩

이번에 풀어본 문제는 백준의 상범 빌딩입니다. 6593번: 상범 빌딩


3차원의 간단한 BFS문제입니다. 다익스트라 알고리즘 분류로 들어가서 풀었는데 왠 BFS인지..ㅋㅋ


너무 간단하게 해결!!


많은 분들이 이렇게 풀긴 하지만, 전 처음 해봤는데 좌표를 이동 시키는데 해당 이동 값을 저장시킨후에 for문을 돌리는 방법이 보기에 편한 것 같더라구요.



그림을 보면 좌표의 이동이 이렇게 되는 것을 알 수 있습니다. 좀 헷갈리긴 하지만, 가만 생각해보면 맞다는 것을 알 수 있습니다.

그러면 이렇게 표현할 수 있겠네요.

int moveH[6] = { -1, 1, 0, 0, 0, 0};
int moveX[6] = {  0, 0, 0, 0,-1, 1};
int moveY[6] = {  0, 0,-1, 1, 0, 0};
이렇게 표현하면 for문으로 간단하게 좌표의 이동을 알 수 있겠네요. 저번에 문제를 풀었던 것 처럼 이 문제도 visit값을 boolean이 아닌 integer로 해서 이동값을 저장하게 하였습니다.
void Find()
{
    queue<LOCA> que;
    que.push(startP);
    
    while(!que.empty())
    {
        int h = que.front().h;
        int x = que.front().x;
        int y = que.front().y;
        que.pop();
        //0 -> up | 1 -> down | 2 -> left | 3 -> right | 4 -> back | 5 -> front
        for(int i=0; i<6; i++)
        {
            int mH = h+moveH[i], mX = x+moveX[i], mY = y+moveY[i];
            if(LocaCheck(mH,mX,mY))
            {
                que.push({mH,mX,mY});
                visit[mH][mX][mY] = visit[h][x][y]+1;
            }
        }
    }
}
이렇게 하면 BFS의 설계가 마무리되네요!!! 전체 코드는 여기 있습니다. 코드