반응형

 

dp[x][y] = (x, y) 좌표에서 출발했을 때 최종적으로 도착하는 지점의 좌표를 저장해주었습니다.

각 좌표마다 최종 지점까지 이동하면서 탈출 가능한 칸인지 검사해주었습니다.

 

#include <iostream>
using namespace std;

int n, m, ans = 0;
char map[502][502] = { 0 };
pair<int, int> dp[502][502];
bool visit[502][502] = { false };

pair<int, int> dfs(int x, int y) {
	if (visit[x][y]) {
		if (!(dp[x][y].first == 0 && dp[x][y].second == 0)) return dp[x][y];
		else return dp[x][y] = { x, y };
	}
	if (map[x][y] == 0) return { x, y };
	visit[x][y] = true;
	int nx = x, ny = y;
	if (map[x][y] == 'U') nx--;
	else if (map[x][y] == 'R') ny++;
	else if (map[x][y] == 'D') nx++;
	else ny--;
	return dp[x][y] = dfs(nx, ny);
}

int main() {
	scanf("%d %d", &n, &m);
	for (int i = 1; i <= n; i++) {
		scanf("%s", &map[i][1]);
	}
	for (int i = 1; i <= n; i++) {
		for (int j = 1; j <= m; j++) {
			pair<int, int> res = dfs(i, j);
			if (res.first < 1 || res.second < 1 || res.first > n || res.second > m) {
				ans++;
			}
		}
	}
	printf("%d", ans);
}
반응형

'Algorithm' 카테고리의 다른 글

백준 17825 : 주사위 윷놀이  (0) 2021.11.17
백준 3980 : 선발 명단  (0) 2021.11.17
백준 1374 : 강의실  (0) 2021.11.17
백준 2250 : 트리의 높이와 너비  (0) 2021.11.17
백준 2533 : 사회망 서비스(SNS)  (0) 2021.11.17

+ Recent posts