[C++]백준3109번 빵집

1 minute read

문제는 다음과 같다.

오늘은 백준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;
}

Tags:

Categories:

Updated: