[C++]백준3109번 빵집
문제는 다음과 같다.
오늘은 백준3109번 빵집 문제를 풀어보도록 하자. 첫 번째 열부터 끝 열까지 이을 수 있는 파이프의 수를 계산하는 문제이다.
DFS로 0,0 ~ R-1,0 까지 for문을 돌려서 DFS를 R번 돌려주면 되는 문제였다. 만일 이어질 수 있다면 int dfs는 1을 리턴하고
이어질 수 없다면 0을 리턴하는 식으로 구현을 하였다.
[코드]
#include <iostream>
using namespace std;
int R, C, answer = 0, temp;
char map[10000][500];
bool visit[10000][500];
int dir[3][2] = { {-1,1},{0,1},{1,1} };
bool Inbound(int y, int x) {
return y >= 0 && x >= 0 && y < R && x < C;
}
int dfs(int y, int x) {
visit[y][x] = true;
if (x == C - 1)return 1;
for (int i = 0; i < 3; i++) {
int my = y + dir[i][0];
int mx = x + dir[i][1];
if (Inbound(my, mx)) {
if (!visit[my][mx] && map[my][mx] == '.') {
int temp = dfs(my, mx);
if (temp != 0) {
return temp;
}
}
}
}
return 0;
}
int main() {
ios::sync_with_stdio(false);
cin.tie(0);
cin >> R >> C;
for (int i = 0; i < R; i++) {
for (int j = 0; j < C; j++) {
cin >> map[i][j];
}
}
for (int i = 0; i < R; i++) {
answer += dfs(i, 0);
}
cout << answer;
}