문제 이해
- 미로에서 출발점에서 도착점까지 갈 수 있는 방법의 수를 구하라.
해결 전략
- DFS를 통해 점을 한 칸씩 이동한다.
- 점을 이동하기 전에 board 내부에 있는 점인지, 방문한 적 없는 점인지 체크한다.
- 한 번 방문한 점은 visited 배열을 통해서 true로 처리한다.
구현
import java.util.*;
class Main {
	static int[] dx={-1, 0, 1, 0};
	static int[] dy={0, 1, 0, -1};
	static int[][] board;
	static boolean[][] visited;
	static int answer=0;
	public void DFS(int x, int y){
	
      if(x == 7 && y == 7){
          answer++;
          return; 
      }else{
           
           for(int i=0; i<4; i++){
              int nx = x+dx[i];
              int ny = y+dy[i];
            
            if(1<=nx && nx<=7 && 1<=ny && ny<=7 && board[nx][ny] == 0 && visited[nx][ny] == false){
                  visited[nx][ny] = true;
                  DFS(nx, ny);
                  visited[nx][ny] = false;
            }
            
          }
          
      }
      
	}
	public static void main(String[] args){
		Main T = new Main();
		Scanner kb = new Scanner(System.in);
		board=new int[8][8];
		visited = new boolean[8][8];
		for(int i=1; i<=7; i++){
			for(int j=1; j<=7; j++){
				board[i][j]=kb.nextInt();
			}
		}
		board[1][1]=1;
		T.DFS(1, 1);
		System.out.print(answer);
	}
}
피드백
- visited 배열을 통해서 방문을 처리할 수 있다.
- 혹은 board배열을 0에서 1로 바꿔서 방문을 처리할 수도 있다.
'PS' 카테고리의 다른 글
| 자바(Java) 알고리즘 문제 풀이 - 토마토(BFS 활용) (0) | 2022.04.13 | 
|---|---|
| 자바(Java) 알고리즘 문제 풀이 - 미로의 최단 거리 통로(BFS) (1) | 2022.04.13 | 
| 코딩 인터뷰 완전 분석 1.5 하나 빼기 (0) | 2022.04.11 | 
| 코딩 인터뷰 완전 분석 1.4 회문 순열 (3) | 2022.04.11 | 
| 코딩 인터뷰 완전 분석 1.3 URL화 (0) | 2022.04.11 |