Algorithm/baekjoon

미로 탈출하기

마닐라 2022. 1. 23. 22:19

📍 문제 설명

 

💡 접근

단순하게 방문했던 곳을 방문했을 경우만 처리를 해주면 시간초과가 나는 문제였다.

각 좌표에서 문자에 따라 방문할 때 해당 좌표를 거쳐간 경로가 탈출 가능 경로인지 불가능 경로인지를 입력해두면 다른 좌표에서 방문할 때 거쳤던 경로의 탈출 가능 여부에 따라 바로 리턴시켜줄 수 있으므로 효율적으로 탐색이 가능해진다.

 

👩‍💻 코드

import java.util.*;

public class Main {
    static int n, m, h, k, answer, cnt, max, min, wall, result = Integer.MAX_VALUE;
    static char[][] board, clone, dis;
    static boolean[][] visited,successRoute;
    static int[] parent = new int[100001];
    static int[] ch,pm, combi;
    static boolean flag = false;
    static int[] dx = {-1,1,0,0};
    static int[] dy = {0,0,-1,1};
    public static void main(String[] args) {
        Main T = new Main();
        Scanner kb = new Scanner(System.in);

        n = kb.nextInt();
        m = kb.nextInt();
        kb.nextLine();
        board = new char[n][m];
        visited = new boolean[n][m];
        for(int i = 0; i < n; i++) {
            String s = kb.nextLine();
            for(int j = 0; j < m; j++) {
                board[i][j] = s.charAt(j);
            }
        }
        for(int i = 0; i < n; i++) {
            for(int j = 0; j < m; j++) {
                if(T.solution(i, j)) cnt++;
            }
        }
        System.out.println(cnt);
    }

    private boolean solution(int x, int y) {
        boolean result = false;
        //해당 좌표에서 탈출 가능한지 확인
        if(x < 0 || y < 0 || x >= n || y >= m) {
            return true;
        }
        //갈 수 있던 곳이면 갈 수 있다.
        if(board[x][y] == 'T') return true;
        //갈 수 없었던 곳이면 갈 수 없다.
        else if(board[x][y] == 'F') return false;

        //방문한 곳을 또 가면 못나가는거야
        if(visited[x][y]) return false;

        visited[x][y] = true;
        //방문한 곳은 T or F 처리가 될꺼니까 방문 해제해서 다시 방문할 필요 없음
        if(board[x][y] == 'U') result = solution(x-1, y);
        if(board[x][y] == 'R') result = solution(x, y+1);
        if(board[x][y] == 'D') result = solution(x+1, y);
        if(board[x][y] == 'L') result = solution(x, y-1);

        board[x][y] = result? 'T' : 'F';
        return result;
    }
}

'Algorithm > baekjoon' 카테고리의 다른 글

미로탈출  (0) 2022.01.24
탈출  (0) 2022.01.24
연구소2  (0) 2022.01.23
연구소  (0) 2022.01.23
종이의 개수  (0) 2022.01.23