728x90
728x90
- N * M 행렬에서 최단 거리를 보장해주는 탐색 알고리즘인 BFS를 사용하였다.
- 단순히 N*M의 범위를 넘지 않고 벽이 아닌 곧이 있을 경우 해당 값을 큐에 삽입 후 좌표의 값을 1 증가시켰다.
- 최종적으로 반환 값은 N*M 좌표의 값을 반환시켰다. 하지만 해당 값이 1인 경우 모든 벽에 둘러 쌓여서 탐색을 하지 못한 경우이기에 -1 값을 반환하도록 설정하였다.
#include<vector>
#include<queue>
using namespace std;
int answer =0;
int solution(vector<vector<int> > maps)
{
int dx[] = {-1,0,1,0};
int dy[] = {0,1,0,-1};
queue<pair<int,int>> q;
q.push({0,0});
while(!q.empty())
{
for(int i=0; i<4;i++)
{
int nx = q.front().first + dx[i];
int ny = q.front().second + dy[i];
if(nx >= 0 && nx <= (maps.size() -1) && ny >= 0 && ny <= (maps[i].size() -1) && maps[nx][ny] == 1)
{
q.push({nx,ny});
maps[nx][ny] = maps[q.front().first][q.front().second] + 1;
}
}
q.pop();
}
return maps[maps.size()-1][maps[0].size()-1] == 1 ? -1 : maps[maps.size()-1][maps[0].size()-1];
}
728x90
728x90
'Language > C++' 카테고리의 다른 글
[c++][백준 15686][prev_permutaion] 치킨 배달 - 컴도리돌이 (0) | 2021.11.22 |
---|---|
[c++][백준 2146][BFS] 다리 만들기 - 컴도리돌이 (0) | 2021.11.21 |
[프로그래머스][위클리 챌린지 - 6주차][sort] 복서 정렬하기 - 컴도리돌이 (0) | 2021.09.09 |
[프로그래머스][위클리 챌린지-5주차] [DFS] 5주차_모음사전 - 컴도리돌이 (0) | 2021.09.09 |
[프로그래머스][level2][c++] 2021 KAKAO BLIND RECRUITMENT - 순위 검색 - 컴도리돌이 (0) | 2021.08.27 |