Point πŸ’‘


if dfs(nx, ny):
		return True

Python Solution


import sys
r, c = map(int, sys.stdin.readline().split())

graph = []
for _ in range(r):
    graph.append(list(sys.stdin.readline().rstrip()))

dx = [-1, 0, 1]
dy = [1, 1, 1]

visited = [[-1 for _ in range(c)] for _ in range(r)]
cnt = 0

def dfs(x, y):
    # dfsλŠ” μ’…λ£Œμ‘°κ±΄μ„ λ¨Όμ € μƒκ°ν•˜κΈ°
    if y == c-1:
        return True

    for i in range(3):
        nx, ny = x + dx[i], y + dy[i]

        if 0 <= nx < r and 0 <= ny < c:
            if graph[nx][ny] != 'x' and visited[nx][ny] == -1:
                visited[nx][ny] = 1
                # ν•΄λ‹Ή μΆœλ°œμ§€μ—μ„œ 갈 수 μžˆλŠ” 졜적의 κ²½λ‘œκ°€ λ“±μž₯ν–ˆλ‹€λ©΄ 더 이상 μž¬κ·€μ μΈ 탐색을 ν•˜μ§€ μ•ŠλŠ”λ‹€.
                if dfs(nx, ny):
                    return True
    return False

for i in range(r):
    if dfs(i, 0):
        cnt += 1

print(cnt)

Java Solution


import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Main {

    static char[][] graph;
    static int r;
    static int c;
    static int count;
    static int[][] visited;
    static int[] dx;
    static int[] dy;

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());
        r = Integer.parseInt(st.nextToken());
        c = Integer.parseInt(st.nextToken());

        graph = new char[r][c];
        for (int i=0; i<r; i++){
            graph[i] = br.readLine().toCharArray();
        }

        dx = new int[]{-1, 0, 1};
        dy = new int[]{1, 1, 1};

        visited = new int[r][c];
        for (int i = 0; i<r; i++){
            for (int j = 0; j<c; j++) {
                visited[i][j] = -1;
            }
        }

        for(int i=0; i<r; i++){
            if (dfs(i, 0)) {
                count++;
            }
        }

        System.out.println(count);

    }

    public static boolean dfs(int x, int y) {
        if (y == c-1) {
            return true;
        }

        for (int i=0; i<3; i++) {
            int nx = x + dx[i];
            int ny = y + dy[i];

            if (0 <= nx &&  nx < r && 0 <= ny && ny < c) {
                if (graph[nx][ny] != 'x' && visited[nx][ny] == -1) {
                    visited[nx][ny] = 1;
                    if (dfs(nx, ny)) {
                        return true;
                    }
                }
            }
        }

        return false;
    }
}