문제
설명
7*7 격자판 미로를 탈출하는 경로의 가지수를 출력하는 프로그램을 작성하세요.
출발점은 격자의 (1, 1) 좌표이고, 탈출 도착점은 (7, 7)좌표이다. 격자판의 1은 벽이고, 0은 통로이다.
격자판의 움직임은 상하좌우로만 움직인다. 미로가 다음과 같다면
위의 지도에서 출발점에서 도착점까지 갈 수 있는 방법의 수는 8가지이다.
입력
7*7 격자판의 정보가 주어집니다.
출력
첫 번째 줄에 경로의 가지수를 출력한다.
예시 입력 1
0 0 0 0 0 0 0
0 1 1 1 1 1 0
0 0 0 1 0 0 0
1 1 0 1 0 1 1
1 1 0 0 0 0 1
1 1 0 1 1 0 0
1 0 0 0 0 0 0
예시 출력 1
8
내 풀이 = 선생님 풀이
import java.util.Scanner;
public class Main8_10 {
static int[] dx = {-1, 0, 1, 0};
static int[] dy = {0, 1, 0, -1};
static int[][] board;
static int answer=0;
public void DFS(int x, int y){
if(x==7 && y==7) answer++;
else {
for (int i = 0; i <= 3; i++) {
int nx = x+dx[i];
int ny = y+dy[i];
if(nx >= 1 && nx <= 7 && ny >= 1 && ny <= 7 && board[nx][ny] == 0) {
board[nx][ny] = 1;
DFS(nx, ny);
board[nx][ny] = 0;
}
}
}
}
public static void main(String[] args) {
Main8_10 T = new Main8_10();
Scanner sc = new Scanner(System.in);
board = new int[8][8];
for (int i = 1; i <= 7; i++) {
for (int j = 1; j <= 7; j++) {
board[i][j] = sc.nextInt();
}
}
board[1][1] = 1;
T.DFS(1, 1);
System.out.println(answer);
}
}
선생님 코드를 보고 변수, 배열 이름만 맞춘 채 시작했다.
인프런의 다른 강의(영리한 프로그래밍을 위한 알고리즘 강좌)에서 순환(recursion)에 대해 배웠었고,
그때 해봤던 여러 예제들 중 미로찾기 예제가 있어서 조금 수월하게 풀 수 있었다. (했던 걸 기억하고 풀었을 때 오는 배움의 기쁨,,,✨)
https://rookie-programmer.tistory.com/40
결과
'Algorithm > Inflearn' 카테고리의 다른 글
[Inflearn] 자바 알고리즘 문제풀이 #08-12 12. 토마토(BFS 활용) (0) | 2023.04.26 |
---|---|
[Inflearn] 자바 알고리즘 문제풀이 #08-11 11. 미로의 최단거리 통로(BFS) (0) | 2023.04.25 |
[Inflearn] 자바 알고리즘 문제풀이 #08-09 9. 조합 구하기(DFS) (0) | 2023.04.24 |
[Inflearn] 자바 알고리즘 문제풀이 #08-08 8. 순열 추측하기(DFS, 조합, 메모이제이션) (1) | 2023.04.21 |
[Inflearn] 자바 알고리즘 문제풀이 #08-07 7. 조합의 경우수(DFS, 메모이제이션) (1) | 2023.04.17 |