반응형
programmers.co.kr/learn/courses/30/lessons/1844
bfs문제였습니다.
풀이방법
1. bfs 수행 : d배열을 선언해서 0,0에서 출발하여 벽이 아닌 부분을 이동하며 거리를 저장합니다.
2. 도착했을 때 해당 부분의 값이 0이라면 갈수 없으므로 -1을 반환합니다. 아니라면 d[n-1][m-2]를 반환합니다.
Code
#include <bits/stdc++.h>
using namespace std;
using pii = pair<int,int>;
int dr[] = {0, 0, 1, -1};
int dc[] = {1, -1, 0, 0};
int ck[101][101], n, m;
int bfs(vector<vector<int>> maps){
queue <pii> q;
q.push({0,0});
ck[0][0] = 1;
while(!q.empty()){
int r = q.front().first;
int c = q.front().second;
q.pop();
if(r == n - 1 && c == m - 1) return ck[r][c];
for(int i = 0; i < 4; i++){
int nr = r + dr[i];
int nc = c + dc[i];
if(0 > nr || nr >= n || 0 > nc || nc >= m) continue;
if(ck[nr][nc] || !maps[nr][nc]) continue;
ck[nr][nc] = ck[r][c] + 1;
q.push({nr,nc});
}
}
return -1;
}
int solution(vector<vector<int>> maps){
n = maps.size();
m = maps[0].size();
memset(ck, 0, sizeof(ck));
return bfs(maps);
}
'Algorithm > BFS' 카테고리의 다른 글
(C++) - 백준(BOJ) 16928번 : 뱀과 사다리 게임 (0) | 2021.04.08 |
---|---|
(C++) - 프로그래머스(고득점 kit - 그래프) : 가장 먼 노드 (0) | 2021.04.07 |
(C++) - 백준(BOJ) 1743번 : 음식물 피하기 (0) | 2021.03.27 |
(C++) - 백준(BOJ) 16236번 : 아기 상어 (0) | 2021.03.26 |
(C++) - 백준(BOJ) 16234번 : 인구 이동 (0) | 2021.03.24 |