반응형
다시 풀었다. 마찬가지로 이전 코드와 비슷비슷하다!
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);
}
}
}
}
반응형
'[프로그래머스]' 카테고리의 다른 글
[프로그래머스] 멀리 뛰기 C++ (0) | 2024.03.23 |
---|---|
[프로그래머스] 피로도 (1) | 2024.03.22 |
[프로그래머스] 숫자 변환하기 C++ (0) | 2024.03.22 |
[프로그래머스] 미로 탈출 C++ (0) | 2024.03.22 |
[프로그래머스] 등산코스 정하기 (0) | 2024.03.22 |