이번에 풀어본 문제는 백준의 상범 빌딩입니다. 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의 설계가 마무리되네요!!! 전체 코드는 여기 있습니다. 코드
'코딩 소양 > 알고리즘 문제' 카테고리의 다른 글
[백준 알고리즘] 15684번 사다리 조작 (3) | 2018.10.16 |
---|---|
[백준 알고리즘] 15683번 감시 (0) | 2018.10.16 |
[백준 알고리즘] 2178번 미로찾기 (0) | 2018.09.26 |
[CodeGround] 괄호 문제 (0) | 2018.09.21 |
핵심 친구 찾기 문제 (0) | 2018.09.20 |