
접근 방법
- 2차원 배열을 정의하여 0과 1을 입력받는다.
- 재귀함수를 호출하며 각각 오른쪽, 아래로 인덱스가 증가하도록 한다.
- 값이 0 이거나, 이미 방문한 좌표는 제외하며 이동한다.
- 받은 인덱스가 도시의 끝이라면 Yes, 도착하지 못하면 No를 출력한다.
책임 분배
- 입력을 받고 결과를 출력하는 main 메서드
- 인덱스를 증가시키며 이동하는 재귀함수인 move 메서드
import java.io.*;
public class Silver3_31575_도시와비트코인 {
static int[][] city;
static boolean[][] visit;
static boolean isSuccess = false;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
String[] t = br.readLine().split(" ");
int N = Integer.parseInt(t[0]);
int M = Integer.parseInt(t[1]);
city = new int[M][N];
visit = new boolean[M][N];
for (int i = 0; i < M; i++) {
String[] input = br.readLine().split(" ");
for (int j = 0; j < N; j++) {
city[i][j] = Integer.parseInt(input[j]);
}
}
move(0, 0);
if(isSuccess) {
bw.write("Yes");
} else {
bw.write("No");
}
bw.flush();
bw.close();
}
static void move(int y, int x) {
visit[y][x] = true;
if(city[y][x] == 0) {
return;
}
if(y == city.length -1 && x == city[0].length -1) {
isSuccess = true;
}
if(y+1 < city.length && !visit[y+1][x]) {
move(y+1, x);
}
if(x+1 < city[0].length && !visit[y][x+1]) {
move(y, x+1);
}
}
}