[프로그래머스]

[프로그래머스] 리코쳇 로봇 C++

Hevton 2024. 3. 22. 23:28
반응형

 

다시 풀었다. 마찬가지로 이전 코드와 비슷비슷하다!

bfs인데 한 방향으로 쭈우욱 가면 된다.

#include <string>
#include <queue>
#include <vector>

using namespace std;

bool visit[101][101];
int mx[4] = {-1, 1, 0, 0};
int my[4] = {0, 0, -1, 1};

int bfs(int sx, int sy, int row, int col, vector<string> board) {
    
    queue<pair<pair<int, int>, int>> que; // x, y, depth 
    que.push({{sx, sy}, 0});
    visit[sx][sy] = true;
    
    while(!que.empty()) {
        
        int x = que.front().first.first;
        int y = que.front().first.second;
        int depth = que.front().second;
        
        que.pop();
        
        if(board[x][y] == 'G')
            return depth;
        
        for(int i = 0; i < 4; i++) {
            
            int tx = x;
            int ty = y;
            
            while(tx + mx[i] >= 0 && tx + mx[i] < row && ty + my[i] >= 0 && ty + my[i] < col && board[tx+mx[i]][ty+my[i]] != 'D') {
            tx += mx[i];
            ty += my[i];
            }
            
            if(!visit[tx][ty]) {
                que.push({{tx, ty}, depth + 1});
                visit[tx][ty] = true;
            }
        }
    }
    return -1;
}

int solution(vector<string> board) {
    
    int row = board.size();
    int col = board[0].size();
    
    for(int i = 0; i < row; i++) {
        for(int j = 0; j < col; j++) {
            if(board[i][j] == 'R') {
                return bfs(i, j, row, col, board);
            }
        }
    }
}
반응형