NOT FOUND

[코테] 백준 13565 침투: DFS Java 본문

coding test

[코테] 백준 13565 침투: DFS Java

이종은 2025. 5. 28. 21:39

https://www.acmicpc.net/problem/13565

 

DFS 코드

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

public class baekjoon_13565 {
    static int N, M;
    static int[][] arr;
    static boolean[][] visited;
    static int[] dx = {0, -1, 0, 1};
    static int[] dy = {1, 0, -1, 0};

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        StringTokenizer st = new StringTokenizer(br.readLine(), " ");
        N = Integer.parseInt(st.nextToken());
        M = Integer.parseInt(st.nextToken());

        arr = new int[N][M];
        visited = new boolean[N][M];

        for (int i = 0; i < N; i++) {
            st = new StringTokenizer(br.readLine(), " ");
            arr[i] = Arrays.stream(st.nextToken().split("")).mapToInt(Integer::parseInt).toArray();
        }

        // 만약에 첫번째에 0이 없다면 fasle
        for (int i = 0; i < M; i++) {
            if(!visited[0][i] && (arr[0][i] == 0)) {
                dfs(0,i);
            }
        }

        System.out.println("NO");
    }

    public static void dfs(int i, int j) {
        visited[i][j] = true;

        if(i == N-1) {
            System.out.println("YES");
            System.exit(0);
        }

        for (int k = 0; k < 4; k++) {
            int nx = i + dx[k];
            int ny = j + dy[k];

            if(nx >= 0 && ny >= 0 && nx < N && ny < M) {
                if(arr[nx][ny] == 0 && !visited[nx][ny]) {
                    dfs(nx, ny);
                }
            }
        }
    }
}

 

DFS로 풀었는데 생각보다 오래걸려서 BFS로도 얼마나 걸리나 봤는데 조금 차이 난다

 

위가 BFS 아래가 DFS